All pages

Marketing sections

None of these sections takes its copy as a prop, so changing what the landing page says is an edit to the component rather than to the page that mounts it.

Hero

Post once.Publish everywhere.

Upload a video, an image or a text post, choose the platforms it belongs on, and schedule it. Postflare publishes to all of them at the same time, from one place.

  • YouTube
  • LinkedIn
  • X

TikTok, Instagram and Facebook are coming next.

The first screen: a two-line headline, a sentence whose nouns are links into the docs, and the two calls to action.

src/lib/docs/showcase/hero.tsx

import { Hero } from '@/components/Hero/Hero'

export function HeroDemo() {
  return <Hero />
}

TechStack

The stack under the hero, one card per technology. Each card holds a small picture of the job that technology does in the repository, in its own Stage component beside TechStack.tsx, and each mark is an export from simple-icons, so a mistyped brand fails the type check instead of drawing a broken shape. Editing the stack means editing the STACK array and the stage each entry names.

Ten tools, one job each

Each piece of the stack does one job in this repository, and each card shows that job being done.

  • TanStack Start

    File-based routing and server rendering

  • TypeScript

    Strict from the database to the browser

  • Tailwind CSS

    Utility classes over one token file

  • daisyUI

    A component layer with a light and a dark theme

  • Express

    The api that owns billing and access

  • Clerk

    Email codes, Google and GitHub sign-in

  • Stripe

    One-time purchases and subscriptions at once

  • Drizzle

    Typed queries and generated migrations

  • PostgreSQL

    Every purchase and entitlement in one place

  • Resend

    Transactional email written as React

The stack under the hero, one card per technology, each with a small picture of the job it does here, which plays while the card is on screen.

src/lib/docs/showcase/tech-stack.tsx

import { TechStack } from '@/components/TechStack/TechStack'

export function TechStackDemo() {
  return <TechStack />
}

Features

The backbone of every project

Four systems every product rebuilds from scratch, wired together so you don't have to.

One repo, two apps

Your site and your api, sharing one set of types.

fast-forward-dev

apps/webWhat people see

  • TanStack StartRouting
  • ReactInterface
  • Tailwind CSSStyling
  • daisyUIThemes
  • ClerkSign-in
  • TanStack QueryData

Sign-in without passwords

Email codes, Google and GitHub, ready on day one.

Email

you@example.com

or

Billing that stacks

One-time purchases and subscriptions, unlocked the moment they are paid.

Pro

$169.00 once

  1. Checkout paid
  2. Webhook received
  3. Purchase recorded
  4. Entitlement granted
  5. Receipt emailed

Docs and a blog in every language

Write in Markdown, publish in English and Danish.

/docs/setup/install

Language

Install and run

Clone the repo, install with pnpm, and hand the in-repo setup to an agent through SETUP.md.

The four systems the boilerplate wires together, as cards. Each one holds a working miniature of the real thing: the monorepo, the sign-in, a purchase moving through the pipeline, and a docs page in both languages.

src/lib/docs/showcase/features.tsx

import { Features } from '@/components/Features/Features'

export function FeaturesDemo() {
  return <Features />
}

HowItWorks

Get started in minutes

Paste one prompt into your coding agent. It clones the repo and sets up every service for you.

Clone github.com/fast-forward-dev/fast-forward-dev and follow SETUP.md

Your agentReading SETUP.md
Neonsub-agent
  1. neon link --no-env-pull
  2. Postgres linked, database URL written
Clerksub-agent
  1. clerk link --app app_31sBqM
  2. Clerk keys written to both apps
Stripesub-agent
  1. stripe login
  2. Stripe account verified
  3. stripe listen --forward-to localhost:5001/stripe/webhook
  4. Webhooks forwarding to the api
~/my-productmain agent
  1. pnpm db:migrate
  2. Migrations applied
  3. pnpm dev
  4. Web on localhost:3000, api on localhost:5001

One prompt to a coding agent, branching into three sub-agent terminals that run at once and joining where the app starts. It plays once when scrolled to, and again from the send button.

src/lib/docs/showcase/how-it-works.tsx

import { HowItWorks } from '@/components/HowItWorks/HowItWorks'

export function HowItWorksDemo() {
  return <HowItWorks />
}

IconFeatures

Everything you need to post everywhere

  • One upload

    Video, image or text, sent everywhere

  • Your platforms

    LinkedIn, X, YouTube and more

  • Scheduling

    Every platform goes live together

  • Captions per platform

    Adjust the text for each audience

  • Content calendar

    See everything that is queued

  • Drafts

    Start a post now, finish it later

  • Connected accounts

    Sign in once with each platform

  • Post status

    Know when each post went live

  • Light and dark

    Easy on the eyes, day or night

The smaller things that ship, as small cards with a name and a short detail each, after the four systems have had their own cards.

src/lib/docs/showcase/icon-features.tsx

import { IconFeatures } from '@/components/IconFeatures/IconFeatures'

export function IconFeaturesDemo() {
  return <IconFeatures />
}

Pricing

Pick a plan

One place to publish to every platform you use.

Billing interval

Yearly billing gives you two months free.

Creator

For creators who post every week.

$29.00per month

Free for 7 days, then billed monthly. Cancel anytime.

  • Up to 15 channels
  • Unlimited scheduled posts
  • YouTube, LinkedIn and X
  • Captions per platform
  • Content calendar

Growth

For creators running several brands.

$69.00per month

Free for 7 days, then billed monthly. Cancel anytime.

  • Up to 50 channels
  • Everything in Creator
  • Room for more profiles and pages
  • Priority support

The pricing section renders one card per slug sold in the active Stripe environment. Amounts come from the catalog, and display copy follows the selected language.

src/lib/docs/showcase/pricing.tsx

import { Pricing } from '@/components/Pricing/Pricing'

export function PricingDemo() {
  return <Pricing />
}

OfferCard

The one entry here that is a component rather than a section. Pricing passes it one CardCopy per slug, and that record is exhaustive over the catalog: adding a slug is a type error until copy exists for it. The copy in the frame below is the demo's own, not the shipped card's.

Pro

The boilerplate, and the storefront that sells it. One repo.

$169.00once

Pay once. Access is never revoked.

  • Permanent read access to the repository
  • API (Express)
  • Invite delivery with retries
  • Lifetime updates

Last updated Sep 4, 2026

One offer, as a card. The amount and the cadence come off the catalog entry the api resolves the price from, so the number shown and the number charged cannot disagree.

src/lib/docs/showcase/offer-card.tsx

import { CATALOG } from '@ffd/shared'
import { OfferCard } from '@/components/OfferCard/OfferCard'
import type { CardCopy } from '@/lib/catalog/card-copy'
import { UPDATES } from '@/lib/updates'

// Illustrative copy, not the shipped card's. `Pricing` owns the real
// `Record<Slug, CardCopy>`, and the amount and cadence below come off the
// catalog either way.
const COPY: CardCopy = {
  name: 'Pro',
  tagline: 'The boilerplate, and the storefront that sells it. One repo.',
  bullets: [
    'Permanent read access to the repository',
    'API (Express)',
    'Invite delivery with retries',
    'Lifetime updates',
  ],
  cta: 'Get the boilerplate',
  footnote: 'Pay once. Access is never revoked.',
  // Read off the changelog rather than typed here, so the claim above it is a
  // fact about the repo instead of a date that rots.
  updatedOn: UPDATES[0]?.date,
}

export function OfferCardDemo() {
  return <OfferCard slug="pro" entry={CATALOG.pro} copy={COPY} />
}

FAQ

Frequently asked questions

Here are some of the most frequently asked questions. If you have any other questions, feel free to reach out by email.

What is Postflare?
Postflare publishes one post to all of your social media accounts at once. Upload a video, an image or some text, choose where it should go, and Postflare posts it to every platform you picked.
Which platforms can I post to?
YouTube, LinkedIn and X today, with TikTok, Instagram and Facebook coming next. You connect the accounts you use, and for each post you choose which of them it goes to.
Can I schedule posts for later?
Yes. Pick a date and a time, and Postflare publishes to every platform you selected at that moment, so the post goes live everywhere together.
What kind of media can I post?
Videos, images and text posts. You upload the file once, and the same post goes to every platform you selected.
Do I have to give Postflare my passwords?
No. You connect each account through the platform's own sign-in, and you can disconnect it at any time.
Can I cancel my subscription?
Yes. You can cancel from your dashboard at any time, and you keep access until the end of the period you have paid for.

The FAQ uses daisyUI collapse rows over a focusable checkbox. Rows open from the keyboard before hydration; translations use the shared language provider.

src/lib/docs/showcase/faq.tsx

import { FAQ } from '@/components/FAQ/FAQ'

export function FaqDemo() {
  return <FAQ />
}

CTA

Stop posting the same video five times

Upload it once, pick your platforms, and let Postflare publish it everywhere.

The closing call to action band, in the one token pair that does not invert between the two themes.

src/lib/docs/showcase/cta.tsx

import { CTA } from '@/components/CTA/CTA'

export function CtaDemo() {
  return <CTA />
}

Shipped, but not mounted

WithOrWithout and MadeWith ship as components and are not on /. Each one is a whole section of the page you may want back: a before-and-after column pair and a social-proof grid. Mount one by adding a line to routes/index.tsx.

With or Without

Without Fast Forward Dev

  • Spend days creating web layouts manually
  • Pay for costly integrations or plugins
  • Lose time debugging payment gateways
  • Endless support requests for login issues
  • Rebuild backend connections every time

With Fast Forward Dev

  • Plug-and-play layouts for rapid development
  • All-in-one solution, no extra costs
  • Effortless Stripe integration for payments
  • Seamless, prebuilt Google and email login
  • Backend and frontend ready to go, no hassle

The before and after column pair, in the two semantic colours that pass as body text in both themes.

src/lib/docs/showcase/with-or-without.tsx

import { WithOrWithout } from '@/components/WithOrWithout/WithOrWithout'

export function WithOrWithoutDemo() {
  return <WithOrWithout />
}

The social proof section. Replace the PROJECTS array with your own; the entries are external sites, so each is a plain anchor rather than a Link.

src/lib/docs/showcase/made-with.tsx

import { MadeWith } from '@/components/MadeWith/MadeWith'

export function MadeWithDemo() {
  return <MadeWith />
}

Not shown here

About and AboutShort also ship, and are not in this gallery. They are one person's autobiography, and About carries a YouTube embed, so they are page content you delete rather than components you reuse. Read them at src/components/About/.

Updated