尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 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)
AstroLink is an entrant in Build with Gemini XPRIZE ($2M prize pool, deadline Aug 17, 2026).檢視完整 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.