StargazeSign in
MAMas

Ashlr Timeline

Your company on a single living timeline. Calendar sync is the utility, memory is the moat.

Closed sourcesaasTypeScript1
Share on X

★ Embed badge

Paste it in your README. Updates live as you collect right-swipes.

Markdown[![Stargaze](https://stargaze.ashlr.ai/api/badge/ashlr-timeline-91e7ee.svg)](https://stargaze.ashlr.ai/p/ashlr-timeline-91e7ee)
HTML<a href="https://stargaze.ashlr.ai/p/ashlr-timeline-91e7ee"><img src="https://stargaze.ashlr.ai/api/badge/ashlr-timeline-91e7ee.svg" alt="Stargaze" /></a>
URLhttps://stargaze.ashlr.ai/api/badge/ashlr-timeline-91e7ee.svg

From the README

Ashlr Timeline

CI CodeQL License Built with Claude Deploy on Vercel

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.

Like what you see?

Star this on Stargaze — auto-stars on GitHub when you swipe right.

Star this on Stargaze