尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Gamora is a social platform for artists. Artists sign up, post their work, follow each other, and browse a job wall. It is a portfolio project
翻译准备中
正在加载完整 README。
查看完整 README ↗Gamora is a mobile social platform for artists. Artists sign up, post their work, follow each other, and browse a job wall. It is a portfolio project: the artist side is real and live, and everything on the hiring and money side is marked "Coming soon".
Live site: <gamora-xi.vercel.app>
These features are designed but not built. Their entry points open a "Coming soon" screen:
The jobs on the wall are sample data and are labelled as samples. Seeded posts are labelled as demo.
| Area | Tool |
|---|---|
| Framework | Next.js (App Router) with TypeScript |
| Styling | Tailwind CSS with CSS variables for the five themes, shadcn/ui and Radix, vaul for bottom sheets, Motion for animation |
| Auth | Better Auth (email and password, Google) |
| Database | Neon Postgres with Drizzle ORM |
| Image storage | Vercel Blob, processed with sharp |
| Rate limiting | Upstash Redis |
| Validation | Zod |
| Hosting | Vercel |
| Design | Figma, read through the Figma MCP |
| Built with | Claude Code |
src/
app/ routes (public, auth, app, admin) and API routes
components/ ui, layout, shared, feed, jobs, profile, onboarding, icons
server/ db schema, auth, services (data), actions (mutations), validators, security, storage
lib/ env validation and helpers
styles/ themes.css
docs/ build guide and build log
drizzle/ migrations
Server code never imports from components. Every mutation follows the same order: validate with Zod, check the signed-in user, check ownership, rate limit, then write.
You need Node 20 or newer and accounts for Neon, Upstash, Vercel Blob and Google Cloud (for Google sign-in).
git clone https://github.com/abuelosolos/gamora.git
cd gamora
npm install
cp .env.example .env.local
Fill in .env.local:
| Variable | What it is |
|---|---|
DATABASE_URL | Neon pooled connection string |
DATABASE_URL_UNPOOLED | Neon direct connection string, used for migrations |
BETTER_AUTH_SECRET | Random secret: openssl rand -base64 32 |
BETTER_AUTH_URL | http://localhost:3000 |
NEXT_PUBLIC_APP_URL | http://localhost:3000 |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Google OAuth client (redirect URI http://localhost:3000/api/auth/callback/google) |
BLOB_READ_WRITE_TOKEN | Vercel Blob store token (public store) |
UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN | Upstash Redis |
ADMIN_EMAILS | Comma-separated emails allowed to use the admin page |
Then set up the database and start the app:
npm run db:migrate
npm run db:seed # optional: sample jobs and demo posts
npm run dev
Open http://localhost:3000.
Useful scripts:
| Command | What it does |
|---|---|
npm run dev | Start the dev server |
npm run build | Production build |
npm run typecheck | TypeScript check |
npm run lint | Lint |
npm run db:generate | Create a migration from schema changes |
npm run db:migrate | Apply migrations |
npm run db:studio | Browse the database |
npm run icons | Generate icon components from src/assets/svgs |
.env.local and Vercel, never in the repositoryKnown trade-off: the email-first sign-in reveals whether an email has an account, because there is no email verification. It is rate limited.
Artist side complete. Hirer side, shop, wallet and chat are planned.