Book verified aerospace experts for live 1:1 video sessions — astronauts, flight controllers, and operators.
CommerceTypeScript · HTMLGitHub @CarlosPHernandezOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
AstroLink is a paid expert network for aerospace and space — live 1:1 video sessions with verified operators, astronauts, and industry specialists (GLG/Minnect-style, vertical-specific).
Buyers book sessions, receive AI-generated pre-call briefs, join private Daily rooms, and get post-session recaps. Experts set rates; the platform handles payments, compliance hooks, and bilingual session access.
Stack: Next.js 16 (App Router) · Supabase · Stripe · Daily · Gemini (@google/genai)
AstroLink is an entrant in Build with Gemini XPRIZE ($2M prize pool, deadline Aug 17, 2026).Read the full README ↗AstroLink is a paid expert network for aerospace and space — live 1:1 video sessions with verified operators, astronauts, and industry specialists (GLG/Minnect-style, vertical-specific).
Buyers book sessions, receive AI-generated pre-call briefs, join private Daily rooms, and get post-session recaps. Experts set rates; the platform handles payments, compliance hooks, and bilingual session access.
Stack: Next.js 16 (App Router) · Supabase · Stripe · Daily · Gemini (@google/genai)
Engineering status: docs/d1-implementation-plan.md
AstroLink is an entrant in Build with Gemini XPRIZE ($2M prize pool, deadline Aug 17, 2026).
| Category | Professional Services Access — connecting everyday people with the expert guidance they need |
| Problem | High-stakes aerospace knowledge is locked behind personal networks, opaque consulting firms, and conferences most buyers cannot access |
| Product | A marketplace where anyone can discover, book, and follow a live session with a verified expert — with AI running match, brief, synthesis, translation, and compliance triage |
AstroLink is not a generic video app or course platform. It sells access to named experts — flight controllers, program managers, astronauts — with escrow, audit trails, and session context built for regulated-adjacent domains.
Gemini (and OpenAI fallback via src/lib/llm.ts) runs key decisions in the live product:
| Agent | Role |
|---|---|
| APX-01 Match | Default /booking path: the configured LLM picks a listed expert from goals (browse is optional) |
| APX-10 Path Assessment | Free readiness report; Gemini matches a listed expert when the model succeeds |
| APX-02 Briefing | Dual pre-session briefs for mentee + expert (briefing_json v2 bundle) |
| APX-12 Settlement | After hang-up, decides completed / no-show / hold and payout eligibility |
| APX-03 Session | Post-call summary only when a stored transcript exists |
| APX-06 Translation | Live captions and localized recap (aerospace glossary) |
| APX-09 Reviews | Screens consented quotes; auto-publishes only when policy-clear |
Structured decision logs for judges: T8 in D1 plan (export from audit_log).
Copy env template and fill keys from the Supabase dashboard (publishable/anon + service role for server agents):
cp .env.example .env.local
Migrations live in supabase/migrations/ and are applied to project vwoizjesyyygmokfqpyy:
20260531140000_initial_schema.sql — core tables + RLS (public mentor directory)20260531140100_seed_d1_dev.sql — dev seed (Chris Sembroski, [email protected] user)Regenerate DB types after schema changes (requires Supabase CLI):
supabase link --project-ref vwoizjesyyygmokfqpyy
supabase gen types typescript --linked -o src/lib/database.types.ts
Demo auth (local and E2E): with ENABLE_DEMO_AUTH=true, use seed emails in src/lib/auth-presets.ts — mentee [email protected], mentor Chris [email protected], or demo mentor Carlos [email protected] (dual-device video: see docs/how-to/demo-dual-device-video.md). Public Google sign-in is Clerk at /sign-in and /sign-up when the Clerk keys in .env.example are set. Demo presets stay on /auth.
.env.local: Supabase keys, GEMINI_API_KEY (LLM_PROVIDER=gemini), STRIPE_SECRET_KEY, NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRET, DAILY_API_KEY, and SKIP_STRIPE_PAYMENTS=true for local booking without Stripe.npm run dev, sign in as Carlos ([email protected] on /auth with demo auth enabled)./experts?q= (category filters, name/role/expertise search, card grid, inline preview — desktop modal or mobile sheet); the landing page also shows a fixed five-expert directory grid (Eiman, Chris, Priya, Jenni, Andrew). Click a name for the profile page (/experts/[slug]) or use Book session on a card for the fast path./booking?mentor=chris-sembroski still books that expert. Bare /booking (no mentor) is the Gemini match path: goals → APX-01 → listed expert. Pay with Stripe test card 4242….stripe listen --forward-to localhost:3000/api/webhooks/stripe, orPOST /api/book/fulfill with { "bookingId": "<uuid>" } (development only)./session/[bookingId] with a server-minted Daily token (private room). Buyers confirm captions/recap language before Daily mounts.| Path | Purpose |
|---|---|
src/app/ | Routes and API (/early-access, /join, /experts, /booking, /talk-with-chris, …) |
src/components/ | Feature UI (early-access, experts, booking, session, chris-campaign) |
src/lib/chris-campaign/ | Chris booking campaign: dual pricing, slots, dates, referrers, route allowlists |
src/lib/waitlist/ | Waitlist signup, routing, metrics, analytics |
src/lib/transcript-translation/ | Live captions and post-call translation |
docs/ | Tutorials, how-tos, reference (index) |
Index: docs/README.md
| Topic | Start here |
|---|---|
| Chris campaign go-live | docs/how-to/chris-campaign-launch-checklist.md |
| Chris waitlist email sequence | docs/how-to/chris-early-waitlist-email-automation.md |
| First local video call | docs/tutorial/first-video-session.md |
| Bidirectional live captions | docs/tutorial/bidirectional-live-captions.md |
| Investor demo runbook | docs/how-to/video-session-demo.md |
| Video APIs & gates | docs/reference/video-session.md |
| Why private rooms + webhooks | docs/explanation/video-session-architecture.md |
| D1 status & checklist | docs/d1-implementation-plan.md |
SDK drift for OpenAI, Stripe, Supabase, and Daily is handled by the published CLI simon-maintain (source: simon-maintain) — not a vendored copy in this repo.
npm run maintain:check -- openai # or: stripe | supabase | daily | all
npm run maintain:status
npm run maintain -- migrate openai --dry-run
State is written under .simon/ (gitignored). Legacy .astro-maintain/ is also ignored.
npm test # Vitest unit/contract tests
npm run test:e2e # Playwright D1 golden path (requires .env.local + Supabase seed)
Vitest covers D1 contract logic: booking pricing, /api/book request schema, Daily webhook parsing, LLM rate limits (including caption scope), dev payment skip helpers, session waitlist guard (getSession), Stripe booking test-mode production guard, booking-agent mentor pool validation, D3 translate-segment / segment-cache / translation-queue / caption-direction / guess-supported-locale / POST /api/me/preferred-locale paths, transcript APIs, public expert helpers (expert-book-href, expert-bio), and Chris campaign helpers (chris-pricing, chris-campaign-dates, slots, booking validation).
Automates the skip-Stripe D1 golden path, D3 localized recap, D3 live-caption stub, and public experts directory: E2E session bootstrap → book Chris → APX-02 briefing → session room (mentee confirms caption language via e2e/helpers/caption-language.ts before Daily mounts); pt-BR mentee recap after simulate_meeting_ended; mentee caption rail with stubbed segment translation; /experts filters, preview panel, and profile deep links.
Prerequisites: .env.local with Supabase keys, ENCRYPTION_KEY, and seed data applied (20260531140100_seed_d1_dev.sql, plus 20260607120000_session_translations.sql for D3 Phase 2). Playwright sets APP_MODE=full, ENABLE_DEMO_AUTH=true, SKIP_STRIPE_PAYMENTS=true, E2E_STUB_LLM=true, and DAILY_TRANSCRIPTION_ENABLED=false on the dev server automatically (so post-session synthesis runs without Daily transcription).
Playwright starts its own Next.js dev server on 127.0.0.1:3000 — stop any other process on that port before running E2E.
npm run test:e2e # headless
npm run test:e2e:ui # interactive UI mode
E2E bookings are tagged with spec-specific goals prefixes (E2E:golden-path, E2E:localized-recap, E2E:live-captions, E2E:experts-directory, etc.) and cleaned up before/after each spec. See docs/d3-transcript-translation-roadmap.md for D3 phases. Real Stripe checkout E2E is deferred to the real-Stripe feature branch.
cp .env.example .env.local # fill Supabase, Stripe, Daily, GEMINI_API_KEY (OpenAI optional fallback)
npm ci
npm run dev # http://localhost:3000
Production: APP_MODE=full — directory, booking, and /talk-with-chris are open. APP_MODE=waitlist is a kill-switch only. See AGENTS.md.
Deploy: Vercel (production URL: astro-link.space). See docs/how-to/stripe-production-cutover.md for payment cutover.