ai-startup-skills
创业公司做 AI 产品的 7 步 Agent Skill 合集:验证 → BP → 政策 → 路演 → 获客 → 定价 → 注册。
Translation pending
Search public complaints, share your first-hand experience and read responses on Zero Stars.
OtherJavaScript · HTMLGitHub @Craterus77OnlineOwner 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.
A complaints-only public register. Node + Express API, Supabase Postgres on Vercel and built-in node:sqlite locally,
real password-hashed accounts and session cookies, and the same front-end design as the
static prototype (now fetching from the API).
The database (zerostars.db) and seed data are created automatically on first start.
• npm run seed re-seeds with --reseed (wipes complaints/businesses, re-inserts the samples).
• Delete zerostars.db* for a completely fresh start (also clears accounts).
What's real here (vs the static prototype)Read the full README ↗A complaints-only public register. Node + Express API, Supabase Postgres on Vercel and built-in node:sqlite locally,
real password-hashed accounts and session cookies, and the same front-end design as the
static prototype (now fetching from the API).
npm install # once
npm start # serves http://localhost:4317
The database (zerostars.db) and seed data are created automatically on first start.
npm run seed re-seeds with --reseed (wipes complaints/businesses, re-inserts the samples).zerostars.db* for a completely fresh start (also clears accounts).| Concern | Implementation |
|---|---|
| Database | SQLite via node:sqlite — users, sessions, businesses, complaints, replies |
| Auth | Register / login with email + password; scrypt-hashed, timingSafeEqual check |
| Sessions | Random token in an HttpOnly; SameSite=Lax cookie |
| Persistence | Filed complaints and business replies are written to the DB and survive restarts |
| Authorization | Filing a complaint / posting a reply requires a valid session (401 otherwise) |
| Right of reply | POST /api/complaints/:id/reply adds a response and flips the case to responded |
| Method | Path | Auth | Purpose |
|---|---|---|---|
| GET | /api/meta | — | Categories + register-wide stats |
| POST | /api/auth/register | — | Create account, start session |
| POST | /api/auth/login | — | Sign in |
| POST | /api/auth/logout | ✓ | End session |
| GET | /api/auth/me | — | Current user (or null) |
| GET | /api/complaints?q=&cat=&status=&sort= | — | Search / filter / sort the feed |
| POST | /api/complaints | ✓ | File a complaint |
| POST | /api/complaints/:publicId/reply | ✓ | Business right of reply |
| GET | /api/businesses/:slug | — | Dossier: business + complaints + stats |
Vercel runs the Express backend through api/index.js. The frontend remains in
public/. Hosted deployments require Supabase Postgres; local SQLite files are
not used on Vercel. Node 24 is pinned in engines and .nvmrc.
vercel.json. Do not set
DATABASE_URL in frontend code or use a public-prefixed variable name.supabase/migrations/20261003000000_zero_stars.sql.
If Supabase GitHub branching is configured to deploy migrations, confirm that
this migration succeeds for the database used by Vercel. Simply connecting
GitHub does not guarantee migration deployment. Alternatively, run the file
in Supabase's SQL Editor, or initialize once from a trusted terminal with the same
DATABASE_URL (and CA when needed) securely injected:
npm ci
npm run db:setup
This creates the tables and indexes without demo data or demo accounts. It is
repeatable. Do this before deploying; schema changes never run automatically
on serverless cold starts. An existing local SQLite database is not copied to
Supabase by this command; existing records need a separate data migration./healthz for { "ok": true }, open the
frontend, then register and file a complaint. Confirm the complaint and login
persist across another deployment. A new hosted database starts with an empty
register; /api/meta will report zero complaints until one is filed.The existing application's email/password and session authentication stays in place; Supabase supplies Postgres storage, not Supabase Auth. The backend uses its trusted database role. Row level security is enabled on all application tables with no public Data API policies, so browser clients cannot read password hashes or session tokens using Supabase's anonymous key. Never expose the connection string, database password, or a service-role key in the browser.
Supabase's Next.js quickstart helpers (next/headers, Server Components, and
Next.js middleware) do not apply to this Express app. The Supabase JS and SSR
packages are available, but the current backend uses pg and its own session
cookies. NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
identify the public Data API project; they cannot replace DATABASE_URL or
authorize the backend's database queries. Express does not automatically load
.env.local; inject the database connection string into the server process or
Vercel environment settings. Local SQLite remains the default until it is set.
For a disposable demonstration project only, npm run db:demo adds the fictional
sample data and documented demo accounts. Do not run it against a real deployment.
npm run seed resets local SQLite sample complaints/businesses and is blocked
for hosted Postgres. Vercel deployments never seed automatically.
Without DATABASE_URL, npm start retains the local SQLite workflow. With
DATABASE_URL, it uses the initialized Supabase database. DB_PATH and
DATA_DIR apply only to SQLite. Local development does not require Supabase
credentials.
npm run check
npm test # isolated SQLite integration tests
# Set TEST_DATABASE_URL securely to a disposable Postgres database, then:
npm test # isolated Postgres integration tests
When TEST_DATABASE_URL is set, the suite creates and drops a unique schema;
the test role must have permission to create schemas. It never inherits the
application's DATABASE_URL or writes to existing application tables. Do not
provide a production database as a test target. For local validation, a Postgres
server on loopback can use non-TLS connections; hosted connections always verify
TLS certificates. Neither tests nor deployments require a compilation step.
Businesses can challenge a complaint, and moderators adjudicate — the safeguard against false or defamatory entries.
Flow
moderation_log with the moderator and an optional note.Being a moderator
[email protected] / zerostars-mod (local prototype
credentials — change before any real use).MOD_EMAILS (comma-separated) and signing in, e.g.
MOD_EMAILS="[email protected]".API
| Method | Path | Auth | Purpose |
|---|---|---|---|
| POST | /api/complaints/:publicId/dispute | user | Raise a dispute (flags complaint) |
| GET | /api/moderation/queue?state=open|upheld|rejected | moderator | Review disputes + counts |
| POST | /api/moderation/disputes/:id/resolve | moderator | {action: keep|remove|resolve, note} |
Removed complaints are excluded from all public endpoints (/api/complaints, dossiers, /api/meta).