diff --git a/components/ApplyButton.tsx b/components/ApplyButton.tsx
new file mode 100644
index 000000000..e78a30970
--- /dev/null
+++ b/components/ApplyButton.tsx
@@ -0,0 +1,57 @@
+import CustomLink from './Link'
+
+const APPLY_PATHS = {
+ grant: '/apply/grant',
+ lts: '/apply/lts',
+} as const
+
+type ApplyTrack = keyof typeof APPLY_PATHS
+
+type ApplyButtonProps = {
+ prelude?: string
+ cta?: string
+ preTagline?: string
+ tagline?: string
+ track?: ApplyTrack
+ href?: string
+}
+
+export default function ApplyButton({
+ prelude = 'Click here to',
+ cta = '>_ apply',
+ preTagline = 'Apply for an',
+ tagline = 'OpenSats grant',
+ track = 'grant',
+ href,
+}: ApplyButtonProps) {
+ const target = href ?? APPLY_PATHS[track]
+
+ return (
+
+
+ {prelude}{' '}
+ {cta}
+
+
+
+ {preTagline} {tagline}
+
+
+ Apply
+
+ for a grant
+
+
+
+
+ 🟧
+ 🟧
+ 🟧
+
+
+ )
+}
diff --git a/components/MDXComponents.tsx b/components/MDXComponents.tsx
index 022b2c474..d7d624f52 100644
--- a/components/MDXComponents.tsx
+++ b/components/MDXComponents.tsx
@@ -13,6 +13,7 @@ import DonateToGeneralFundButton from './DonateToGeneralFundButton'
import DonateToNostrFundButton from './DonateToNostrFundButton'
import DonateToOperationsButton from './DonateToOperationsButton'
import DonateRecurringButton from './DonateRecurringButton'
+import ApplyButton from './ApplyButton'
import DesignTeam from './DesignTeam'
import Credits from './Supporters'
import YouTubeEmbed from './YouTubeEmbed'
@@ -41,6 +42,7 @@ export const MDXComponents: ComponentMap = {
DonateToNostrFundButton,
DonateToOperationsButton,
DonateRecurringButton,
+ ApplyButton,
DesignTeam,
YouTubeEmbed,
Credits,
diff --git a/data/blog/call-for-applications-spring-2026.mdx b/data/blog/call-for-applications-spring-2026.mdx
new file mode 100644
index 000000000..247a8e822
--- /dev/null
+++ b/data/blog/call-for-applications-spring-2026.mdx
@@ -0,0 +1,111 @@
+---
+title: "Call for Applications"
+date: '2026-04-29'
+tags: ['OpenSats', 'bitcoin', 'grants', 'applications']
+authors: ['default', 'arvin', 'tuma', 'btcschellingpt']
+images: ['/static/images/blog/107-call-for-applications-spring-2026.jpg']
+draft: false
+summary: "OpenSats is seeking grant proposals for projects advancing Layer 1 Bitcoin privacy."
+---
+
+Developers and contributors working on Bitcoin, nostr, and adjacent freedom tech
+can [apply for a grant] at any time, and our board reviews proposals on a
+rolling basis.
+
+Twice a year, in the spring and fall, we plan to highlight a focus area where we
+would like to see strong proposals. This spring, the focus is on privacy at
+Bitcoin's base layer.
+
+
+
+Privacy on Bitcoin matters for the same reasons it matters anywhere else. People
+accepting bitcoin for their work, running a small business, donating to causes,
+or saving for the future reasonably expect the same kind of day-to-day financial
+privacy they would get from traditional banking tools. As [Greg Maxwell] put it
+back in 2013:
+
+>Traditional banking provides a fair amount of privacy by default. Your inlaws
+don't see that you're buying birth control that deprives them of grandchildren,
+your employer doesn't learn about the non-profits you support with money from
+your paycheck, and thieves don't see your latest purchases or how wealthy you
+are to help them target and scam you. Poor privacy in Bitcoin can be a major
+practical disadvantage for both individuals and businesses.
+
+There are real privacy gaps on-chain today. Much of that sits in wallet behavior
+and transaction construction, which makes it a great area for open-source
+development to improve the experience for users.
+
+A lot of privacy work supported by OpenSats has already happened at higher
+layers of the bitcoin stack. For example, on Layer 2, grantees have advanced
+[BOLT12 offers] and receiver-side privacy for Lightning payments, and on Layer
+3, grantees building [Cashu, Nutshell, Minibits, Fedimint, and related projects]
+have turned Chaumian ecash from research into production infrastructure. That
+work will continue.
+
+Base-layer work is where privacy improvements carry the furthest. For instance,
+every on-chain transaction that uses [Silent Payments] instead of reusing
+addresses, uses [collaborative transaction] methods such as [Payjoin], or opens
+Lightning channels, raises the baseline privacy of everyday users with minimal
+change, if any, to how they already transact. We would like to fund more of this
+type of work.
+
+There are several Layer 1 privacy-centric projects that already receive OpenSats
+support, including [Payjoin Dev Kit] and [Async Payjoin], [Silent
+Payments][sp-grant], [Coinswap], [JoinMarket NG], [Floresta], [ASmap], and
+Bitcoin Core [P2P privacy and node-fingerprinting research]. Foundational
+libraries like [rust-bitcoin] and [BDK] are the basis of much of this privacy
+work, alongside the [Kyoto light client] project, which implements [BIP 157] and
+[BIP 158] compact-block filters that Silent Payments and other privacy tools
+rely on.
+
+This spring, we would especially welcome proposals that extend and improve Layer
+1 work mentioned above, as well as new projects taking fresh approaches to
+on-chain privacy. That includes deeper integration of existing techniques into
+widely used wallets, research and tooling that strengthen the surrounding
+ecosystem, and ideas we have not yet considered.
+
+Strong applications are clear about the problem being addressed, the users being
+served, and a concrete plan for getting there. If your project improves
+base-layer privacy in Bitcoin and is free and open source, please consider
+submitting a grant application.
+
+
+
+Applications go through our [standard process]: a concise proposal reviewed by
+our board on technical merit, potential impact, and ability to execute. Our
+[Application FAQ] covers review timelines, budget guidance, reference letters,
+and other common questions.
+
+Grants awarded to Bitcoin Layer 1 privacy projects will be sourced from our
+[General Fund]. If you would like to help us fund more privacy work on the base
+layer, please [consider making a recurring donation].
+
+[apply for a grant]: /apply
+[Greg Maxwell]: https://bitcointalk.org/index.php?topic=279249.0
+[BOLT12 offers]: /blog/advancements-in-lightning-infrastructure
+[Cashu, Nutshell, Minibits, Fedimint, and related projects]: /blog/advancements-in-ecash
+[Silent Payments]: /topics/silent-payments
+[collaborative transaction]: https://jamdocs.org/glossary/#collaborative-transaction
+[Payjoin]: /topics/payjoin
+[Payjoin Dev Kit]: /blog/bitcoin-grants-july-2023#payjoin-dev-kit
+[Async Payjoin]: /blog/developing-advancements-in-onchain-privacy#async-payjoin
+[sp-grant]: /blog/developing-advancements-in-onchain-privacy#silent-payments
+[Coinswap]: /blog/developing-advancements-in-onchain-privacy#coinswap
+[JoinMarket NG]: /blog/seventeenth-wave-of-bitcoin-grants#joinmarket-ng
+[Floresta]: /blog/bitcoin-grants-september-2024-7th-wave#floresta
+[ASmap]: /blog/bitcoin-grants-september-2024-7th-wave#asmap
+[P2P privacy and node-fingerprinting research]: /blog/five-grants-to-strengthen-bitcoin-development#naiyoma
+[rust-bitcoin]: /blog/ninth-wave-of-bitcoin-grants
+[BDK]: /blog/bitcoin-grants-july-2024
+[Kyoto light client]: /blog/bitcoin-grants-september-2024-7th-wave
+[BIP 157]: https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki
+[BIP 158]: https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki
+[standard process]: /apply/grant
+[Application FAQ]: /faq/application
+[General Fund]: /funds/general
+[consider making a recurring donation]: /donate
diff --git a/public/static/images/blog/107-call-for-applications-spring-2026.jpg b/public/static/images/blog/107-call-for-applications-spring-2026.jpg
new file mode 100644
index 000000000..8e7d13db7
Binary files /dev/null and b/public/static/images/blog/107-call-for-applications-spring-2026.jpg differ
diff --git a/styles/globals.css b/styles/globals.css
index ffa55f8dd..c43eefdef 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -58,3 +58,208 @@ body {
left: -9999px;
top: -9999px;
}
+
+.apply-banner-v2 {
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ align-items: center;
+ max-width: 480px;
+ min-height: 120px;
+ margin: 4rem auto;
+ border-radius: 6px;
+ background-color: #f4f4f5; /* neutral-100 */
+ background-image: linear-gradient(to right, #ffedd5, #f4f4f5);
+ box-shadow: 4px 4px 24px rgba(0, 0, 0, 0.15);
+ color: white;
+ text-decoration: none !important;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
+ overflow: hidden;
+ transition: transform 0.3s ease-in-out;
+ font-size: 1.1rem;
+ line-height: 1.1;
+}
+
+.apply-banner-v2::after {
+ content: '';
+ position: absolute;
+ top: -210px;
+ left: -240px;
+ height: 420px;
+ width: 420px;
+ background-color: #ea580c; /* orange-600 */
+ background-image: linear-gradient(#f97316, #c2410c); /* orange-500 -> orange-700 */
+ transform: rotate(36deg);
+ transition: transform 0.3s ease-in-out;
+ z-index: 0;
+}
+
+.apply-banner-v2__left,
+.apply-banner-v2__right {
+ position: relative;
+ flex: 1;
+ padding: 1rem 1.25rem;
+ transition: opacity 0.5s ease-in-out, transform 0.5s ease-in-out;
+ z-index: 2;
+}
+
+.apply-banner-v2__left {
+ color: white;
+}
+
+.apply-banner-v2__left strong {
+ display: block;
+ font-size: 1.7rem;
+ font-weight: 700;
+ color: white;
+}
+
+.apply-banner-v2__right {
+ text-align: right;
+ color: #9a3412; /* orange-800 */
+ text-shadow: 0 0 4px #f4f4f5, 0 1px 1px #f4f4f5;
+}
+
+.apply-banner-v2__right strong {
+ display: block;
+ font-size: 1.3rem;
+ font-weight: 600;
+ color: #9a3412;
+}
+
+.apply-banner-v2__icons {
+ position: absolute;
+ inset-block-end: 0.5rem;
+ inset-inline-end: 0.75rem;
+ display: none;
+ align-items: end;
+ gap: 4px;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.apply-banner-v2__icons > span {
+ display: inline-flex;
+ opacity: 0;
+ font-size: 1.75rem;
+ line-height: 1;
+}
+
+.apply-banner-v2__icons > span:nth-child(2) {
+ font-size: 2.5rem;
+ transform: translateY(-6px);
+}
+
+.apply-banner-v2:hover {
+ transform: scale(1.05);
+}
+
+.apply-banner-v2:hover::after {
+ transform: scale(3);
+}
+
+.apply-banner-v2:hover .apply-banner-v2__right {
+ opacity: 0;
+}
+
+.apply-banner-v2:hover .apply-banner-v2__left {
+ transform: translate(20px, 4px);
+}
+
+.apply-banner-v2:hover .apply-banner-v2__icons {
+ display: flex;
+}
+
+.apply-banner-v2:hover .apply-banner-v2__icons > span {
+ animation: apply-banner-v2-icon-fade 1s forwards ease-in-out;
+}
+
+.apply-banner-v2:hover .apply-banner-v2__icons > span:nth-child(1) {
+ animation-delay: 0.1s;
+}
+
+.apply-banner-v2:hover .apply-banner-v2__icons > span:nth-child(3) {
+ animation-delay: 0.2s;
+}
+
+@keyframes apply-banner-v2-icon-fade {
+ from {
+ opacity: 0;
+ transform: translateY(12px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.apply-banner-v2:hover .apply-banner-v2__icons > span:nth-child(2) {
+ animation: apply-banner-v2-icon-fade-mid 1s forwards ease-in-out;
+}
+
+@keyframes apply-banner-v2-icon-fade-mid {
+ from {
+ opacity: 0;
+ transform: translateY(12px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(-6px);
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .apply-banner-v2,
+ .apply-banner-v2::after,
+ .apply-banner-v2__left,
+ .apply-banner-v2__right,
+ .apply-banner-v2__icons > span {
+ transition: none !important;
+ animation: none !important;
+ }
+}
+
+.dark .apply-banner-v2 {
+ background-color: #27272a; /* neutral-800 */
+ background-image: linear-gradient(to right, #431407, #27272a); /* orange-950 -> neutral-800 */
+ box-shadow: 4px 4px 24px rgba(0, 0, 0, 0.4);
+}
+
+.dark .apply-banner-v2__right,
+.dark .apply-banner-v2__right strong {
+ color: #fdba74; /* orange-300 */
+ text-shadow: 0 0 4px #1c1917, 0 1px 1px #1c1917;
+}
+
+.apply-banner-v2__tagline-mobile {
+ display: none;
+}
+
+@media (max-width: 480px) {
+ .apply-banner-v2__prelude {
+ display: none;
+ }
+
+ .apply-banner-v2__left strong {
+ white-space: nowrap;
+ }
+
+ .apply-banner-v2__tagline {
+ display: none;
+ }
+
+ .apply-banner-v2__tagline-mobile {
+ display: inline;
+ }
+
+ .apply-banner-v2__right strong {
+ font-size: 1.2rem;
+ }
+
+ .apply-banner-v2__tagline-mobile-sub {
+ display: block;
+ white-space: nowrap;
+ font-size: 0.95rem;
+ }
+}