Generate better prompts, get better AI results.
Tech: Next.js App Router, TypeScript, TailwindCSS, shadcn/ui, Appwrite (Auth + DB), React Query, Google Gemini (REST).
/Landing/loginAuth (email/password + Google OAuth)/dashboardPrompt Builder + Recent/librarySaved prompts with search/filters/settingsProfile, theme note, export
Copy .env.example and set:
- NEXT_PUBLIC_APPWRITE_ENDPOINT
- NEXT_PUBLIC_APPWRITE_PROJECT_ID
- NEXT_PUBLIC_APPWRITE_DATABASE_ID ← used by client queries
- NEXT_PUBLIC_APPWRITE_COLLECTION_PROMPTS_ID← used by client queries
- APPWRITE_API_KEY
- APPWRITE_DATABASE_ID
- APPWRITE_COLLECTION_PROMPTS_ID
- GEMINI_API_KEY
Note: In this environment, .env is for configuration only; server-side variables are read at runtime.
- Database:
promptcraft_db(use its ID in APPWRITE_DATABASE_ID) - Collection:
prompts(use its ID in APPWRITE_COLLECTION_PROMPTS_ID) - Attributes:
userIdstring requiredmodelTargetstring requireduseCasestring requiredinputsobject/JSON requiredrefinedPromptstring requiredtitlestring requiredcreatedAtstring required
- Permissions: user read/write on own docs.
- Auth: Email/password and Google OAuth enabled.
POST /api/generate(Edge)- Validates payload (zod)
- Rate limit: 20/min per IP (in-memory)
- Calls Gemini 1.5 Flash via REST
- Returns
{ refinedPrompt, tokensUsed, model }
POST /api/savePrompt(Node)- Auth via Appwrite JWT in
Authorization: Bearer <jwt> - Saves document with fields:
{ userId, modelTarget, useCase, inputs, refinedPrompt, title, createdAt }
- Auth via Appwrite JWT in
GET /api/exportMyPrompts(Node)- Auth via JWT, returns all user prompts JSON
Test payload for /api/generate:
``` { "targetModel": "ChatGPT", "useCase": "Text", "roughIdea": "Write a blog on beginner-friendly strength training tips", "context": "Audience is 18-25, limited equipment, motivation needed", "audience": "Gen Z beginners", "tone": ["motivational", "friendly"], "outputFormat": "outline", "constraints": ["900-1200 words", "avoid jargon"], "language": "English", "negative": "No dangerous advice" } ```
- shadcn/ui components (Button, Input, Textarea, Select, Tabs, Card, Badge, Dialog, DropdownMenu, Sheet, Toaster)
- Responsive, dark/light mode compatible
- Rounded-2xl cards and soft shadows
- Navbar with model switcher and user menu; collapsible sidebar on mobile
- Keep secrets out of logs.
- Inputs are sanitized and validated with zod.
- Edge vs Node: Gemini route is Edge; Appwrite save/export are Node.