A browser start page that respects your attention.
frontdoor is the page your browser opens to. It is dense, calm, and finished — one screen of everything you want at the start of a session, with no feeds to scroll, no notifications to clear, and no dopamine loop to fall into. You arrive, you get what you need, you leave.
Most start pages are either a search box and nothing else, or a widget dump organized by type — all your links here, all your news there. frontdoor is organized by the psychology of how a person actually consumes information at the start of a session.
The page is a short arc you read top to bottom. Each section has an emotional job:
| Section | Its job |
|---|---|
| Arrive | Calm the nervous system before the firehose — a stoic line, a quote, a word, a piece of history. |
| Act | Now that you're grounded, do — weather, top headlines, your app launcher, time-sensitive links. |
| Reward | A deliberate exhale — a beautiful image, nothing to parse. You earned it. |
| Read | Slower depth — curated daily and weekly reading, business and economics. |
| Discover | The rabbit hole — monthly deep-dives, a featured article, science and research. |
| Depart | Leave the way you arrived — a poem, a photo of the day. The page ends softly. |
Urgency decreases as you go down. The top is time-sensitive; the bottom is timeless. The open and the close rhyme. It's a round trip, not a list.
- One screen, no scrolling fight. The whole dashboard fits in roughly one to two screens. Whitespace separates; it doesn't pad.
- Instant loads. Every external source is fetched server-side and cached daily. Opening the page makes zero API calls and shows zero spinners — it's just there.
- Dense but calm. Small type, dark low-contrast theme, muted pastel accents. The only motion is the clock ticking. No red, no badges, no autoplay, no carousels.
- A keyboard-first search bar. Type a query to search; type a registered shortcut key to jump straight to a site.
- Seven widget types you arrange to taste:
links— bookmark lists with category tags and shortcut keyslauncher— a dense favicon grid of your appsheadlines— RSS/Atom aggregator that interleaves multiple sourcesweather— current conditions + 3-day forecastimage— picture of the day (NASA APOD, Bing, Wikimedia)text— quote / stoic line / poem / on-this-day / featured article / word of the daysection— the structural dividers of the 6-part arc
- Your default new-tab / homepage. Replace the browser's blank page or search box with something that orients you.
- A morning ritual. The Arrive → Depart arc is designed to be read once at the start of the day, not refreshed compulsively.
- A personal dashboard. Your links, your apps, your feeds, your weather — without an account on someone else's algorithm.
- A calm alternative to the feed. If you've removed social apps but still want news and discovery, frontdoor gives you the inputs without the infinite scroll.
- Organized by psychology, not by widget type. The 6-section arc is the product. No other start page is built around the emotional shape of a session.
- It feels like a static document, not an app. No client-side data fetching, no loading states, no layout shift, near-zero JavaScript. The page is inert HTML the instant it paints.
- Calm by construction. The anti-goals are explicit: no motion, no notifications, no saturated color, no dark patterns. Restraint is enforced, not optional.
- Daily-cache discipline. Data refreshes once a day on a schedule. The page is never waiting on the network, and upstream sources are never hammered.
- Yours to shape, within a frame. You reorder widgets, pick colors, add links and feeds — but the section arc stays fixed, so you can't accidentally turn it back into a cluttered widget dump.
This repository currently holds the design spec for frontdoor in design/ —
the layout philosophy, aesthetic principles, widget specs, data sources, config schema, and
target architecture for building it as a React/Next.js app on Vercel, accessed per-user via
an API key.
| Doc | Contents |
|---|---|
01-layout-philosophy.md |
The 6-section arc and ordering rules |
02-aesthetic-and-rendering.md |
The "dense, calm, zero-framework-feel" look |
03-widget-specs.md |
The 7 widget types and their config shapes |
04-data-sources.md |
Every external API — endpoints, auth, quirks |
05-config-schema.md |
The per-user dashboard config (JSON) |
06-architecture.md |
Next.js / Vercel / API-key / cron architecture |
theme.css |
The dark theme |
See CLAUDE.md for build guidance.
- Next.js on Vercel. Every widget is a React Server Component — the content of the page is 100% server-rendered HTML + CSS. Only the clock and the search bar ship client JS.
- Per-user config is a single JSON document stored in Vercel KV, keyed by API key.
- Two caching strategies: global data (RSS, NASA, Bing, Wikimedia, quotes, poems, etc.) is warmed once a day by a Vercel Cron job and shared across all users; weather is cached per location on demand.
- API-key access: a key in the URL bootstraps an
httpOnlycookie session; an invalid key shows a quiet "enter your key" page, never a crash.
Full detail in design/06-architecture.md.