Ashlr Timeline
A living company timeline for startup teams. Calendar sync is the utility, strategic timeline is the product, AI memory is the moat, 3D view is the wow factor.
Quick start (cold clone, ~3 minutes)
git clone <repo>
cd strategic-startup-calendar
./setup.sh
setup.sh is idempotent. It installs Ashlr Stack
and Phantom, provisions every external service this app
needs, stores credentials in Phantom's local vault, applies the Postgres
schema, and prints the dev-server command. Run it again any time something
drifts — it skips work that's already done.
Then:
phantom exec -- pnpm dev # Next.js with proxied secrets
phantom exec -- pnpm exec inngest-cli dev # Background jobs (separate terminal)
phantom exec -- claude # Editor with all MCP servers wired
Open http://localhost:3000.
Why this setup
This repo never holds real credentials. Phantom rewrites every value in
.env.local to a phm_* decoy token and proxies HTTP requests at the
network layer — so api.anthropic.com and supabase.co get the real key,
but the Next.js process and any AI coding tool you point at this repo only
ever see phm_* strings. phantom check runs in the pre-commit hook to
block accidental leaks.
Ashlr Stack is the control plane. .stack.toml is the canonical service
manifest; stack add <service>, stack doctor, and stack sync keep the
local environment, the production environment, and the MCP server set in
agreement.
Stack
- Frontend: Next.js 16 + React 19 + TypeScript + Tailwind v4 + shadcn/ui
- 3D: React Three Fiber + drei + InstancedMesh + postprocessing
- 2D: Schedule-X v4
- Database: Drizzle ORM on Supabase Postgres + pgvector
- Auth: Better Auth (organization plugin = workspaces) + Google OAuth
- Sync: Google Calendar API + Inngest (push channels + 30-min cron)
- AI: Vercel AI SDK + Claude Sonnet 4.6 + assistant-ui + prompt caching
- Infra: Vercel + Supabase Pro + Inngest + Resend (~$26/mo MVP scale)
- DX: Ashlr Stack + Phantom + ashlr-plugin (token-saving MCP)
Routes (24)
| Path | What |
|---|---|
/timeline |
3D year-view cockpit (R3F) |
/calendar |
2D Schedule-X (Day/Week/Month/Agenda) |
/assistant |
Full chat surface with conversation history |
/pressure |
12-week capacity heatmap + warnings |
/search |
Hybrid vector + keyword search |
/event/[id] |
Edit form + dependency manager |
/event/new |
New strategic event (any type) |
/investor-share |
Past 90d · Next 6mo, print-friendly |
/share/[token] |
Public read-only investor view |
/settings/calendars |
Connect Google + import per-calendar |
/settings/calendars/[id]/sources |
Pick which calendars sync |
/settings/workspace/members |
Invite cofounders |
/settings/workspace/share |
ICS feed URL + investor link |
/api/ics/[token] |
Public iCalendar feed (HMAC-signed) |
/api/ai/chat |
Streaming Claude tool-use endpoint |
/api/oauth/google/{connect,callback} |
Calendar OAuth flow |
/api/webhooks/gcal |
Google push notification receiver |
/api/inngest |
Background job runner |
Roadmap
- MVP1 (weeks 1–5) — Internal Ashlr command center. Shipped.
- MVP2 (weeks 6–9) — Weekly review automation, natural-language event creation, capacity warnings expansion, bidirectional sync opt-in.
- MVP3 (weeks 10–13) — External beta, billing, marketing site, onboarding flow.
Full plan: /Users/masonwyatt/.claude/plans/this-is-a-new-resilient-giraffe.md.
Useful commands
pnpm typecheck # tsc --noEmit
pnpm build # production build (24 routes)
pnpm db:push # drizzle-kit push
pnpm db:studio # local DB explorer
pnpm db:seed-demo:phantom <ws> # ~30 Ashlr-flavored events
pnpm secrets:check # phantom check (ad-hoc)
pnpm stack:doctor # verify every service is reachable
pnpm stack:sync:vercel # push secrets to Vercel for prod
Escape hatch
If you ever need to walk away from Phantom and Stack, run
phantom export > .env.production and you're back to a flat .env file.
The data model and code are framework-neutral.