zuna11/climate-craft-plan
Nine dimensions
Deterministic findings
2 environment file(s) committed to git
.env, .env.development
2 potential secret(s) found in committed files
.env — JWT; .env.development — Stripe key
Top findings (AI)
Live secrets committed to repository
The file .env contains a Supabase JWT (anon key with full admin JWT header) and the Supabase project URL. The file .env.development contains Stripe pk_test_ token. These tokens are also duplicated in VITE_ prefixed variables in the same .env file, making them readable in client-side bundle. Once these keys are in a public repo, they must be treated as compromised regardless of 'test' prefix.
Stripe webhook endpoint has no signature verification
File src/routes/api/public/payments/webhook.ts handles Stripe webhooks with no visible stripe.webhooks.constructEvent() call. This means any party can POST arbitrary events to this endpoint, enabling fake payment confirmations, credit injection, or replay attacks.
No test suite — zero confidence in payment, auth, and AI function paths
The file tree shows 0 test files. The package.json has no test script. Routes handling checkout (src/routes/checkout.tsx), Stripe webhooks, auth flows (src/lib/auth-context.tsx, src/integrations/supabase/auth-middleware.ts), and AI itinerary generation (src/lib/itinerary-ai.functions.ts) are entirely untested.
No CI pipeline — code is merged and deployed with no automated gate
.github/workflows is absent. There is no automated lint, type-check, or build verification. Any push to main can break the production build without detection before deployment.
No error tracking in production
File src/lib/error-capture.ts exists but no Sentry, Bugsnag, or equivalent service is configured in package.json or environment variables. Unhandled exceptions in production will be invisible and unrecoverable.
README is a default framework template with no project-specific content
The project has 'unknown' license and a default README. No contributor guide, no architecture document, no runbook for local setup or production deployment exists.