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
- 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 />
}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.
you@example.com
Billing that stacks
One-time purchases and subscriptions, unlocked the moment they are paid.
Pro
$169.00 once
- Checkout paid
- Webhook received
- Purchase recorded
- Entitlement granted
- Receipt emailed
Docs and a blog in every language
Write in Markdown, publish in English and Danish.
/docs/setup/install
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 />
}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
- neon link --no-env-pull
- Postgres linked, database URL written
- clerk link --app app_31sBqM
- Clerk keys written to both apps
- stripe login
- Stripe account verified
- stripe listen --forward-to localhost:5001/stripe/webhook
- Webhooks forwarding to the api
- pnpm db:migrate
- Migrations applied
- pnpm dev
- 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 />
}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 />
}Pick a plan
One place to publish to every platform you use.
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
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} />
}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.
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 />
}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 />
}Made with Fast Forward Dev
Fast Forward Dev (this website)
The boilerplate and the storefront that sells it, in one repo. TanStack Start, Express 5, Clerk, Stripe and Postgres, with the documentation shipping beside the code it documents.
Catch Up for Slack
Summarize your Slack messages with AI. Never miss important messages or deadlines again. Perfect for teams who want to stay on top of their communications without spending hours reading through channels.
Stocker
Collect your stocks in one place. A simple and efficient way to track and manage your stock portfolio. Built for investors who want a clean and straightforward way to monitor their investments.
Codle
Codle is just like Wordle, but for coders. Guess the word in 6 attempts or less to win.
Catch Up for Outlook
Summarize your Outlook emails with AI. Never miss important emails or deadlines again. Perfect for professionals who want to stay on top of their communications without spending hours reading through their inbox.
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/.
