Skip to content

Production release: free-only MVP - #17

Open
Satelink-Protocol wants to merge 110 commits into
mainfrom
launch-mvp
Open

Satelink-Protocol wants to merge 110 commits into
mainfrom
launch-mvp

Conversation

@Satelink-Protocol

Copy link
Copy Markdown
Contributor

Production Release: Free-Only MVP

This PR releases the completed Free-Only MVP marketplace journey to Production.

1. Migrations to Execute on Empty Production DB

During the Vercel production build, scripts/migrate.js will execute migrations 003–011 under advisory lock pg_advisory_xact_lock(hashtext('sm_migrations')):

  • 003_identity_events_bookings.sql: Users (Telegram identity, 21+ flag), events, ticket tiers, bookings, and media.
  • 004_payments_entitlements_admin.sql: Payments, entitlements, admin users, audit logging.
  • 005_audit_and_indexes.sql: Performance indexes and operational audit logs.
  • 006_stars_and_reconciliation.sql: Telegram Stars and financial reconciliation schema.
  • 007_user_personas.sql: User status and persona tracking.
  • 008_admin_superprofile_orders.sql: SuperProfile orders tracking and admin audit.
  • 009_guest_ticketing_and_mystery_venues.sql: Guest ticketing, tier capacity, mystery venue redaction.
  • 010_host_applications.sql: Host onboarding applications and approval queue.
  • 011_trust_safety_remediation.sql: Website safety reporting (reports), attendee mutual blocking (user_blocks), moderation lifecycle.

2. Environment Variables Required for Production

The following environment variables must be configured in Vercel Production before merging:

  • DATABASE_URL: Production connection pooler string (Configured)
  • DATABASE_URL_UNPOOLED: Production direct unpooled string (Configured)
  • TELEGRAM_BOT_TOKEN: Canonical bot token for HMAC login verification (Configured)
  • SESSION_SECRET: High-entropy string (≥ 32 bytes) for HMAC session cookie signing
  • CRON_SECRET: High-entropy token (≥ 16 bytes) for authenticated Vercel cron jobs
  • ADMIN_BOOTSTRAP_TELEGRAM_ID: Owner's Telegram numeric User ID for initial super-admin access
  • PUBLIC_SITE_URL: Canonical site URL (https://strangersmeetup-virid.vercel.app)
  • LEGAL_ENTITY_NAME: Registered business entity name (Consumer Protection Rules 2020)
  • GRIEVANCE_OFFICER_NAME: Appointed Grievance Redressal Officer (IT Rules 2021)
  • GRIEVANCE_EMAIL: Official grievance officer contact email

3. Rollback Plan

  • Code: Vercel instant deployment rollback to the 5c6652a production deployment.
  • Database: Migrations 003–011 are strictly additive (no dropped columns or destroyed tables). In the event of code rollback, database tables are left intact. Never execute destructive SQL in Production.

Satelink-Protocol and others added 30 commits October 29, 2026 21:25
They pass alone in ~28s but exceeded the 30s default in a full run.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- migration 010: events.superprofile_url/product_id/checkout_mode, checkout_intents,
  external_orders, bookings.source, users.email_hash/claim_prompt_until
- single PaymentProvider superprofile_link (createCheckout = URL with ref, verifyWebhook =
  constant-time shared secret, refund = NOT_SUPPORTED_IN_APP); https + superprofile.bio allowlist
- GET /checkout/:slug records an intent and redirects (works signed out); web-only, hidden in the Mini App
- /api/webhooks/superprofile: purchase/refund/cancelled orders, idempotent on order_id, fail-closed
  amount check, unmatched/flagged orders alert admins, refund-after-check-in keeps the record
- Telegram claim flow (/claim, /start claim): one claim per order, 5/hour, generic errors
- admin: Orders tab (finance links, support views, keyset pagination), SuperProfile fields on events
- remove the old ticket checkout/hold/reconcile paths and the provider webhook route

Adapter files, docs and env example are cleaned in the next commit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nd docs

Removes lib/payments/razorpay.js and cashfree.js, PAYMENT_PROVIDER / RAZORPAY_* / CASHFREE_* /
TICKET_CHECKOUT_ENABLED from .env.example, and rewrites PAYMENTS_DECISION, GO_LIVE, RUNBOOK and the
other docs for SuperProfile as the only checkout. A grep test keeps them out.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- .github/workflows/ci.yml (Node 24, postgres:16, lint, unit, Playwright e2e)
- POST /api/reconcile/superprofile + diffOrders for the daily Claude Code task
- e2e for Book Tickets link, redirect, Mini App hiding, 320/375; local seed events
- docs/SUPERPROFILE_OPS.md; purchases without a product are stored, not rejected
- review fixes: bad-secret rate limit, lower(order_id) index, SuperProfile revenue in insights

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…I-only null boundingBox)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
SuperProfile as the only ticket checkout (P1) + CI + reconciliation
…, de-flake wizard e2e; preview audit

- feeds: undici Agent with a validating connect.lookup so a rebound DNS answer can never be the
  address we connect to; isPrivateIp on net.BlockList incl. NAT64/6to4/Teredo/doc/site-local ranges
- session: refuse (503) before inserting a user_sessions row when SESSION_SECRET is missing
- checkout: a started multi-day event can no longer be bought via /checkout/:slug (same rule as free tiers)
- e2e: poll wizard control measurements across autosave re-renders (fixes launch-mvp CI run 40938995707)
- engines.node pinned to 24.x; undici 7.30.1 (exact)
- docs/PREVIEW_RECOVERY_AUDIT.md: git/Vercel/Neon findings, test evidence, PASS/FAIL/BLOCKED matrix

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… for this branch; zod v4 plan

- createFeedDispatcher(lookup) so a test can pin to a local HTTPS server: right
  hostname 200, wrong hostname ERR_TLS_CERT_ALTNAME_INVALID, untrusted issuer refused
- safeFetch: https->http redirect refused before the http request; loops capped at 4
- vercel.json: git.deploymentEnabled false for fix/preview-recovery-audit only, so
  pushing runs CI without building a Preview on the shared Production DB
- audit doc: follow-up verification, zod 4 trial and migration plan

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tion gate, telegram silencing & audit update
Fix PR #9 CI, MCP security and deployment blockers
Prepare StrangersMeetup website and MCP for cloud deployment
fix(deploy): align Render Docker runtime, Playwright base image, and .dockerignore
feat(ux): enhance event discovery search, card ergonomics, mobile navigation, and empty states
… venue presentation, instant discovery, and preview reviewer testing
feat(attendee): synthetic preview seeding, free booking flow, mystery venue presentation, and instant discovery
feat(organiser): Polish organiser onboarding, event wizard and dashboard
…heck-in

- Implement comprehensive organiser workspace: event overview, readiness checklist, ticket inventory & capacity, attendee lookup & cancellations, and event announcements.
- Add event-scoped staff roles and permissions: organiser, event_manager, door_staff, guest_list_manager, assistant with tokenized invites, immediate access revocation, and audit logging.
- Build server-authoritative QR ticket engine: HMAC-SHA256 signed payloads (NLZ1:<ticketCode>:<HMAC>) bound to event and confirmed booking without attendee PII leakage.
- Deliver mobile-first door check-in scanner: camera BarcodeDetector/canvas detection, manual ticket code fallback, atomic duplicate scan and replay prevention, attendance KPIs, and scan history.
- Add database migration 019: event_team audit enhancement, event_staff_invites, tickets, ticket_scans, event_announcements, and existing booking ticket backfill.
- Comprehensive automated test suite in test/m6-organiser-workspace.test.js with 15/15 passing tests and 642 passing regression tests.
- Update docs/PROJECT_STATE.md and add arch/ORGANISER_WORKSPACE_AND_QR_CHECKIN.md.
…dit, mobile tap target remediation and preview automation runbook
Satelink-Protocol and others added 12 commits November 10, 2026 09:57
multi-role-acceptance.spec.js (M9) submits real venue leads in the desktop
and mobile projects; with one shared e2e database those rows reach the
responsive project, so the 'Status of venue lead' combobox matched 3 rows
and failed strict mode at every viewport. Target the seeded lead's row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Consolidate M4–M10 (supersedes #30–#40)
ENABLE_LIVE_PAYMENTS used to open both the SuperProfile link-out and the
PhonePe/UPI checkout. It now gates only the SuperProfile hosted link-out.
A new UPI_CHECKOUT_ENABLED flag (default false, exact 'true' only) gates
every UPI surface: the /checkout/:slug/upi page, intent creation, status
polling, guest claim (HTTP and Telegram), and the PhonePe webhook. Each
returns 404 while off, and the generic /checkout/:slug link falls back
to the event page instead of handing off to the closed UPI page.
Refunds of already-captured payments are deliberately not gated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ePe currency note, release packet

- DNS_AND_EMAIL_ROUTING: Vercel records DNS-only (grey cloud), apex A +
  www CNAME from Vercel Settings > Domains, www -> apex redirect in
  Vercel; drop proxied/Full (Strict) steps. DMARC starts at p=none with
  rua, then quarantine, then reject. Email Routing is receive/forward
  only; "send as" options stated. Cites current Vercel and Cloudflare docs.
- PREVIEW_LOGIN (new): test bot bound to the launch-mvp branch alias,
  production bot to nightlifez.com; exact env names the code reads.
- UPI_PROVIDER_READINESS: note that the payload-currency rule makes
  PhonePe v1 confirmations impossible by design; revisit if onboarded.
- PRODUCTION_RELEASE_PACKET (new): migrations 010-020 and which touch
  existing rows, Gate 3 procedure, Production env names, release and
  rollback steps.
- PROJECT_STATE: consolidation SHAs, superseded PRs, migrations per
  environment, owner gates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(payments): separate UPI_CHECKOUT_ENABLED from ENABLE_LIVE_PAYMENTS (S3a)
docs(launch): DNS/email corrections, Preview login, PhonePe note, release packet (S3b–d, S5)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant