Transform any X timeline into bespoke AI artwork, savage roasts, and intelligence dossiers.
Live Demo • GitHub • Features • Installation • API Reference • Privacy Policy
Grokify analyzes public X (Twitter) accounts using xAI's Grok model with real-time search capabilities, then generates unique AI-powered content including satirical artwork, comedy roasts, FBI-style profiles, comprehensive OSINT dossiers, and street-style caricatures.
No login required. No API keys needed from users. Just enter a username and go...
| Feature | Description |
|---|---|
| 🎨 AI Artwork | Generates satirical cartoon illustrations based on posting personality |
| 🔥 Roast Letter | Comedy Central-style therapy notes from the fictional "Dr. Burn Notice" |
| 🕵️ FBI Profile | Satirical FBI behavioral analysis that diagnoses leftist psychological traits |
| 🔍 OSINT Dossier | Comprehensive intelligence-style analysis with viral content deep dive (POST /api/osint-profile; dossier UI in OsintSection / OsintReport) |
| ✏️ Caricature | Upload a photo and get a Times Square street artist-style caricature |
| ✨ Grokify Prompt | Transform any idea into a polished AI prompt with Grok |
| 🧾 X Post Fact Checker | Paste an X post URL for a structured fact check with quick/deep research modes and optional sources |
| ⚡ Grok Imagine | Feature-flagged xAI image & video generation from the home page (/api/imagine, /api/imagine-video, /api/imagine-video/extend) |
| 👥 Joint Picture | Generate artwork combining two X accounts together |
| 🖼️ 44 Art Styles | 5 categories: Classic, Anime, Modern, Artistic, and Fun (see full list) |
| 📜 Prompt History | Local storage-based history with copy/delete functionality |
| 🔗 Shareable Links | Generate shareable URLs for created artwork |
| 📱 Responsive Design | Beautiful mobile-first UI with iPhone-style interface |
Grokify offers 44 unique art styles organized into 5 categories:
| Style | ID | Description |
|---|---|---|
| MAD Magazine | default |
Bold satirical cartoon style with vibrant colors and exaggerated expressions |
| Oil Painting | oil |
Classical oil painting with rich textures and dramatic chiaroscuro lighting |
| Watercolor | watercolor |
Soft, dreamy painting with flowing colors and gentle gradients |
| Charcoal Sketch | charcoal |
Dramatic drawing with bold strokes, deep blacks, and expressive lines |
| Renaissance | renaissance |
Classical Leonardo/Raphael style portrait with sfumato technique |
| Baroque | baroque |
Ornate dramatic lighting in the style of Caravaggio or Rembrandt |
| Pencil Sketch | pencil |
Detailed pencil drawing with fine linework and crosshatching |
| Art Deco | artdeco |
1920s geometric elegance with luxurious gold and black colors |
| Style | ID | Description |
|---|---|---|
| Studio Ghibli | ghibli |
Whimsical Miyazaki fantasy style with soft pastels and warm nostalgia |
| Anime | anime |
Dynamic Japanese anime with bold lines and expressive eyes |
| Manga B&W | manga |
Black & white manga panels with dramatic ink work and screentone shading |
| Chibi | chibi |
Super-cute kawaii style with oversized head and tiny body |
| Ukiyo-e | ukiyo |
Japanese woodblock prints in elegant Hokusai aesthetic |
| Shonen Action | shonen |
Epic battle manga style like Dragon Ball or Naruto |
| Manhwa | manhwa |
Korean webtoon style with clean digital linework |
| Style | ID | Description |
|---|---|---|
| Pixar 3D | pixar |
3D animated movie style with expressive characters and vibrant colors |
| Cyberpunk | cyberpunk |
Neon-lit futuristic style with holographic elements and pink/cyan palette |
| Vaporwave | vaporwave |
80s/90s aesthetic nostalgia with glitchy effects and gradient sunsets |
| Low Poly | lowpoly |
Geometric 3D faceted style with clean angular shapes |
| Neon Glow | neon |
Glowing neon light art with bright luminous outlines on dark background |
| Minimalist | minimalist |
Clean minimal illustration with simple shapes and lots of white space |
| Glitch Art | glitch |
Digital corruption aesthetic with RGB splitting and scan lines |
| Synthwave | synthwave |
Retro-futuristic 80s with neon grids and sunset gradients |
| Hyperrealistic | hyperreal |
Ultra-detailed photorealism with perfect textures |
| Style | ID | Description |
|---|---|---|
| MAD Roast | mad-roast |
Chaotic MAD Magazine-style parody roast |
| Comic Book | comic |
Bold Marvel/DC style with thick outlines, halftone dots, and action lines |
| Retro Pop Art | retro |
80s/90s pop art with neon colors, pixel elements, and synthwave vibes |
| Impressionist | impressionist |
Monet/Renoir style with visible brushstrokes and dappled light |
| Surrealism | surreal |
Dreamlike Salvador Dal�� style with impossible imagery |
| Warhol Pop | warhol |
Andy Warhol screen print aesthetic with bold flat colors |
| Film Noir | noir |
Moody black & white 1940s cinema aesthetic |
| Expressionist | expressionist |
Bold emotional distortion like Edvard Munch |
| Psychedelic | psychedelic |
Trippy 60s colorful swirls and optical illusions |
| Style | ID | Description |
|---|---|---|
| Sticker Art | sticker |
Die-cut sticker aesthetic with bold outlines and flat vibrant colors |
| Claymation | claymation |
Stop-motion clay style like Wallace & Gromit with charming handmade quality |
| Street Graffiti | graffiti |
Urban spray paint art with dripping effects and raw street energy |
| Pixel Art | pixel |
8-bit retro game style with chunky pixels |
| LEGO | lego |
Brick-built minifigure style with plastic sheen |
| Paper Cut | papercut |
Layered paper craft art with visible shadows |
| Balloon Animal | balloon |
Twisted balloon sculpture style |
| Plushie | plushie |
Cute stuffed toy style with fuzzy textures |
| Vintage Photo | vintage |
Old timey sepia portrait with Victorian styling |
| Steampunk | steampunk |
Victorian brass & gears retro-futuristic aesthetic |
| Fantasy RPG | fantasy |
Epic D&D character art with magical effects |
| Category | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS |
| UI Components | shadcn/ui + Radix UI |
| Database | Neon (Serverless Postgres) |
| ORM | Drizzle ORM |
| AI Analysis | xAI Grok (grok-4.3) |
| Prompt Generation | xAI Grok 4.3 direct API |
| Image Generation | xAI Grok Imagine + Google Gemini via OpenRouter |
| Video Generation | xAI Grok Imagine Video |
| Image Storage | Vercel Blob |
| Deployment | Vercel |
| Tests | Node.js test runner (tsx for TypeScript) |
- Node.js 18.17+
- npm, yarn, or pnpm
- API keys for xAI and OpenRouter
- Neon database (free tier available)
# Clone the repository
git clone https://github.com/AppleLamps/grokify.git
cd grokify
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env.local
# Push database schema
npm run db:push
# Start development server
npm run dev
# Run unit tests (API routes, rate limits, prompt helpers, fact-check, uploads)
npm testCreate a .env.local file with the following:
# Public site (metadata, Open Graph, OpenRouter HTTP-Referer). Use https://www.grokify.com in production.
NEXT_PUBLIC_BASE_URL="https://www.grokify.com"
NEXT_PUBLIC_APP_URL="https://www.grokify.com"
# Database (Neon Postgres)
DATABASE_URL="postgresql://user:password@host/database?sslmode=require"
# xAI API (Grok analysis + X search)
XAI_API_KEY="xai-..."
# Grok Imagine feature flags (disabled unless explicitly true)
NEXT_PUBLIC_GROK_IMAGE_GENERATION_ENABLED="false"
NEXT_PUBLIC_GROK_VIDEO_GENERATION_ENABLED="false"
# OpenRouter API (Gemini/Nano Banana image generation)
OPENROUTER_API_KEY="sk-or-..."
# Vercel Blob (image/video upload storage and abuse controls)
BLOB_READ_WRITE_TOKEN="vercel_blob_..."
UPLOAD_INTENT_SECRET="a-long-random-secret"
UPLOAD_IMAGE_DAILY_LIMIT="20"
UPLOAD_VIDEO_DAILY_LIMIT="10"
UPLOAD_VIDEO_INTENT_DAILY_LIMIT="20"
UPLOAD_VIDEO_TOKEN_DAILY_LIMIT="20"
# Anonymous AI endpoint rate limits (requests per 24 hours per IP + user-agent hash)
AI_ANALYZE_ACCOUNT_DAILY_LIMIT="10"
AI_ANALYZE_ACCOUNT_VIDEO_DAILY_LIMIT="5"
AI_ROAST_ACCOUNT_DAILY_LIMIT="10"
AI_FBI_PROFILE_DAILY_LIMIT="5"
AI_OSINT_PROFILE_DAILY_LIMIT="5"
AI_GENERATE_IMAGE_DAILY_LIMIT="5"
AI_FACT_CHECK_DAILY_LIMIT="15"
AI_PROMPT_GENERATE_DAILY_LIMIT="30"
AI_IMAGINE_DAILY_LIMIT="5"
AI_IMAGINE_VIDEO_DAILY_LIMIT="3"
AI_IMAGINE_VIDEO_EXTEND_DAILY_LIMIT="3"
AI_CARICATURE_DAILY_LIMIT="5"
AI_JOINT_PIC_DAILY_LIMIT="10"
# Comma-separated browser origins allowed to call API routes (defaults to https://www.grokify.com)
ALLOWED_ORIGINS="https://www.grokify.com"
# Optional: only logs AI payload metadata outside production
DEBUG_AI_PAYLOADS="false"Anonymous AI and upload endpoints are rate-limited per IP + user-agent hash over a 24-hour window. Limits are configurable via the AI_*_DAILY_LIMIT and UPLOAD_*_DAILY_LIMIT variables above. Exceeded limits return HTTP 429.
POST /api/analyze-account
Content-Type: application/json
{ "handle": "username" }POST /api/generate-image
Content-Type: application/json
{ "prompt": "...", "handle": "username", "style": "ghibli" }POST /api/analyze-account-video
Content-Type: application/json
{ "handle": "username" }Returns a video prompt from the account profile. Requires NEXT_PUBLIC_GROK_VIDEO_GENERATION_ENABLED=true.
POST /api/roast-account
Content-Type: application/json
{ "handle": "username" }POST /api/fbi-profile
Content-Type: application/json
{ "handle": "username" }POST /api/osint-profile
Content-Type: application/json
{ "handle": "username", "timeRange": "90" }POST /api/caricature
Content-Type: application/json
{ "imageDataUrl": "data:image/jpeg;base64,..." }POST /api/prompt-generate
Content-Type: application/json
{ "idea": "A dragon fighting a robot", "directions": "cinematic lighting" }Uses grok-4.5-latest via the direct xAI API with strict structured output parsing.
POST /api/fact-check-x
Content-Type: application/json
{ "url": "https://x.com/handle/status/1234567890", "mode": "quick" }Modes (both use grok-4.3 via lib/grok-config.ts):
quick— standard timeoutdeep— extended research timeout (240s)
POST /api/imagine
Content-Type: application/json
{ "prompt": "...", "n": 2, "aspect_ratio": "16:9", "response_format": "b64_json" }Requires NEXT_PUBLIC_GROK_IMAGE_GENERATION_ENABLED=true. Returns 503 when disabled.
POST /api/imagine-video
Content-Type: application/json
{ "prompt": "...", "aspect_ratio": "16:9", "duration": 5 }Requires NEXT_PUBLIC_GROK_VIDEO_GENERATION_ENABLED=true.
POST /api/imagine-video/extend
Content-Type: application/json
{ "prompt": "...", "videoUrl": "https://...", "duration": 5 }Extends an existing Grok Imagine video. Requires NEXT_PUBLIC_GROK_VIDEO_GENERATION_ENABLED=true.
POST /api/joint-pic
Content-Type: application/json
{ "handle1": "username1", "handle2": "username2" }Single Next.js application at the repo root. The older nested grok-4-prompt reference project has been removed; Grokify Prompt lives under app/prompt/ and components/prompt/. The standalone /imagine gallery page was removed; Grok Imagine APIs remain and are used from the home flow when feature flags are enabled.
.
├── .agents/skills/ # Optional AI assistant skill docs (Cursor); not required to run the app
├── .claude/skills/ # Claude Code skill docs (mirror of .agents/skills/)
├── app/
│ ├── api/
│ │ ├── analyze-account/ # Profile analysis → image prompt
│ │ ├── analyze-account-video/ # Profile analysis → video prompt
│ │ ├── generate-image/ # Prompt → Gemini image
│ │ ├── imagine/ # Grok Imagine image generation
│ │ ├── imagine-video/ # Grok Imagine video generation
│ │ │ └── extend/ # Extend an existing Grok Imagine video
│ │ ├── joint-pic/ # Joint picture for two accounts
│ │ ├── roast-account/ # Comedy roast generator
│ │ ├── fbi-profile/ # Satirical FBI report
│ │ ├── osint-profile/ # Intelligence dossier
│ │ ├── caricature/ # Photo → caricature
│ │ ├── fact-check-x/ # X post fact-check API
│ │ ├── prompt-generate/ # Grokify Prompt generator
│ │ ├── proxy-image/ # CORS-safe image fetch
│ │ ├── upload-image/ # Vercel Blob storage
│ │ └── upload-video/ # Video upload (token route for client uploads)
│ ├── fact-check/ # X post fact-check page
│ ├── prompt/ # Grokify Prompt page
│ ├── privacy-policy/ # Privacy policy page
│ ├── share/[id]/ # Shareable artwork pages
│ ├── globals.css
│ ├── layout.tsx
│ ├── page.tsx
│ ├── robots.ts # robots.txt (sitemap URL on grokify.com)
│ └── sitemap.ts # sitemap.xml for main routes
├── components/
│ ├── home/
│ │ ├── HomeClient.tsx # Shell: sidebar, overlays, results, dynamic sections
│ │ ├── HomeHeroColumn.tsx # Landing hero, CTAs, modals (memoized)
│ │ ├── HomePhoneColumn.tsx # iPhone-style form; local @username state (memoized)
│ │ └── sections/ # ResultSection, RoastSection, etc.
│ ├── fact-check/ # Fact-check UI
│ ├── prompt/ # Grokify Prompt components
│ ├── ui/ # shadcn/ui components
│ ├── LoadingOverlay.tsx # Animated loading states
│ ├── OsintReport.tsx # OSINT dossier renderer
│ ├── PromptHistorySidebar.tsx
│ ├── ShareButton.tsx
│ └── StyleSelectorModal.tsx # Art style selector
├── db/
│ ├── index.ts # Neon connection
│ └── schema.ts # Drizzle schema
├── hooks/
│ ├── usePromptHistory.ts # Prompt history hook
│ └── use-mobile.tsx # Responsive breakpoint helper (sidebar/UI)
├── tests/ # 25+ unit/route tests (tsx + Node test runner)
└── lib/
├── site.ts # SITE_URL / SITE_NAME (grokify.com) for SEO & APIs
├── ai-rate-limit.ts # Anonymous per-IP AI endpoint rate limits
├── grok-config.ts # Pinned Grok model IDs (grok-4.3)
├── grok-image-availability.ts # Grok Imagine feature flags
├── fact-check-x.ts # X post fact-check logic
├── prompt-client-utils.ts # Grokify Prompt: image compression & preview URL helpers
├── prompt-route-utils.ts # Grokify Prompt API: retryable status / backoff helpers
├── circuit-breaker.ts # API resilience
├── fetchWithTimeout.ts # API timeout handling
├── upload-security.ts # Upload intent tokens & rate limits
└── schemas.ts # Zod validation schemas
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run start |
Start production server |
npm test |
Run unit tests (tests/**/*.test.ts via tsx; 25+ test files) |
npm run lint |
Run ESLint |
npm run db:generate |
Generate Drizzle migrations |
npm run db:migrate |
Run Drizzle migrations |
npm run db:push |
Push schema to database |
npm run db:studio |
Open Drizzle Studio |
- Push to GitHub
- Import project in Vercel
- Add environment variables
- Deploy
The database schema auto-applies on first request with Neon's serverless driver.
Grokify uses specialized AI personas powered by Grok:
| Persona | Endpoint | Description |
|---|---|---|
| Art Director AI | /api/analyze-account |
Translates X personalities into satirical cartoon prompts |
| Dr. Burn Notice | /api/roast-account |
Comedy Central-style therapist delivering affectionate roasts |
| FBI Profiler | /api/fbi-profile |
Cold, clinical BAU analyst diagnosing leftist psychological traits |
| OSINT Analyst | /api/osint-profile |
Elite intelligence analyst building comprehensive dossiers |
| Street Artist | /api/caricature |
NYC Times Square caricature artist with quick wit |
| Prompt Alchemist | /api/prompt-generate |
Expert prompt engineer transforming ideas into polished AI prompts |
| Fact Checker | /api/fact-check-x |
Researches an X post with web/X search and returns a citation-clean structured verdict |
| Grok Imagine | /api/imagine, /api/imagine-video, /api/imagine-video/extend |
xAI native image/video generation (feature-flagged) |
# Fork the repo, then:
git checkout -b feature/your-feature
git commit -m "Add your feature"
git push origin feature/your-feature
# Open a Pull RequestMIT License - see LICENSE for details.
Grokify is funded by fees from $GROKIFY token.
- xAI — Grok API with real-time X search
- OpenRouter — Unified AI model access
- Neon — Serverless Postgres
- Vercel — Hosting & Blob storage
- shadcn/ui — Beautiful UI components
Created by Apple Lamps
Powered by Grok AI & Gemini • Built with Next.js • Deployed on Vercel