[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82122":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":16,"starSnapshotCount":16,"syncStatus":14,"lastSyncTime":40,"discoverSource":41},82122,"story-spark-ai","ronisarkarexe\u002Fstory-spark-ai","ronisarkarexe","StorySparkAI is an open-source platform designed for creative minds to generate and share multiple story variations from a single prompt.",null,"https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai","TypeScript",264,736,2,407,0,35,92,136,105,8.6,false,"main",[25,26,27,28,29,30,31,32,33,34,35,36],"biginner-friendly","css","enhancement","first-issue","good","good-first-issue","motion","open-source","reactjs","tailwindcss","typescript","vscode","2026-06-12 02:04:23","\u003Cdiv align=\"center\">\n\n\u003Cp align=\"center\">\n   \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fblob\u002Fmaster\u002FLICENSE\" target=\"blank\">\n   \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fronisarkarexe\u002Fstory-spark-ai?style=for-the-badge&logo=appveyor\" alt=\"License\" \u002F>\n   \u003C\u002Fa>\n   \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Ffork\" target=\"blank\">\n   \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fronisarkarexe\u002Fstory-spark-ai?style=for-the-badge&logo=appveyor\" alt=\"Forks\"\u002F>\n   \u003C\u002Fa>\n   \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fstargazers\" target=\"blank\">\n   \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fronisarkarexe\u002Fstory-spark-ai?style=for-the-badge&logo=appveyor\" alt=\"Star\"\u002F>\n   \u003C\u002Fa>\n   \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fissues\" target=\"blank\">\n   \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fronisarkarexe\u002Fstory-spark-ai.svg?style=for-the-badge&logo=appveyor\" alt=\"Click Vote Issue\"\u002F>\n   \u003C\u002Fa>\n   \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fpulls\" target=\"blank\">\n   \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues-pr\u002Fronisarkarexe\u002Fstory-spark-ai.svg?style=for-the-badge&logo=appveyor\" alt=\"Click Vote Open Pull Request\"\u002F>\n   \u003C\u002Fa>\n   \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\" target=\"blank\">\n   \u003Cimg src=\"https:\u002F\u002Fkomarev.com\u002Fghpvc\u002F?username=ronisarkarexe&repo=story-spark-ai&style=for-the-badge&color=blue\" alt=\"Repository Views\"\u002F>\n   \u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FStory-Spark_AI-6c3ff7?style=for-the-badge&labelColor=0d0d0d&color=6c3ff7\" alt=\"StorySpark AI\" height=\"40\"\u002F>\n\n# ✨ StorySpark AI\n\n**The open-source AI storytelling platform — turn a single prompt into infinite worlds.**\n\n*Generate, explore, and share multiple story variations powered by OpenAI & Gemini.*\n\n[![Live Demo](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F🌐_Live_Demo-storyspark.ai-6c3ff7?style=for-the-badge&logoColor=white)](https:\u002F\u002Fstoryspark.ai\u002F)\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fronisarkarexe\u002Fstory-spark-ai?style=for-the-badge&color=22c55e)](https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fblob\u002Fmaster\u002FLICENSE)\n&nbsp;\n[![Forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fronisarkarexe\u002Fstory-spark-ai?style=for-the-badge&color=3b82f6)](https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Ffork)\n&nbsp;\n[![Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fronisarkarexe\u002Fstory-spark-ai?style=for-the-badge&color=ef4444)](https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fissues)\n&nbsp;\n[![PRs](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues-pr\u002Fronisarkarexe\u002Fstory-spark-ai?style=for-the-badge&color=8b5cf6)](https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fpulls)\n\u003Cbr\u002F>\n\n![Node](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode.js-20.x-339933?style=flat-square&logo=node.js&logoColor=white)\n![React](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FReact-19-61DAFB?style=flat-square&logo=react&logoColor=black)\n![TypeScript](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5.7-3178C6?style=flat-square&logo=typescript&logoColor=white)\n![MongoDB](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMongoDB-Atlas-47A248?style=flat-square&logo=mongodb&logoColor=white)\n![Express](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExpress-4.x-000000?style=flat-square&logo=express&logoColor=white)\n![Vite](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVite-6.x-646CFF?style=flat-square&logo=vite&logoColor=white)\n\n\u003C\u002Fdiv>\n\n---\n\n## 📖 Table of Contents\n\n- [About](#-about)\n- [Key Features](#-key-features)\n- [Tech Stack](#-tech-stack)\n- [Project Structure](#-project-structure)\n- [Getting Started](#-getting-started)\n  - [Prerequisites](#prerequisites)\n  - [Installation](#installation)\n  - [Environment Variables](#environment-variables)\n  - [Running Locally](#running-locally)\n- [Deployment](#%EF%B8%8F-deployment-vercel)\n- [Contributing](#-contributing)\n- [Contributors](#-contributors)\n- [License](#-license)\n- [Support](#-support)\n\n---\n\n## 🚀 About\n\n**StorySpark AI** is an open-source, full-stack creative writing platform that harnesses the power of **OpenAI GPT** and **Google Gemini** to generate rich, diverse story variations from a single user prompt.\n\nWhether you're a writer battling creative block, an educator exploring narrative structure, or simply someone who loves stories — StorySpark AI is your intelligent storytelling companion.\n\n> 🌐 **Live at:** [storyspark.ai](https:\u002F\u002Fstoryspark.ai\u002F)\n\n\n\n---\n\n## 💡 Key Features\n\n| Feature | Description |\n|---|---|\n| 🤖 **AI Story Generation** | Instantly create unique stories using OpenAI GPT and Google Gemini |\n| 🎭 **Multiple Variations** | Generate several different takes from a single prompt |\n| 🔖 **Bookmarks & History** | Save your favorite stories and revisit past creations |\n| 🧠 **AI Analysis** | Get AI-powered summaries, critiques, and insights on any story |\n| ✍️ **Writing Assistant** | Overcome writer's block with intelligent suggestions |\n| 🔐 **Auth & OAuth** | Secure login with email\u002Fpassword or Google OAuth |\n| 📬 **Email Verification** | SMTP-based account verification flow |\n| 🔔 **Real-time Notifications** | Socket.IO powered live notification system |\n| 📊 **Analytics Dashboard** | Track story stats and user activity with charts |\n| 📱 **Fully Responsive** | Beautiful, seamless experience across all screen sizes |\n\n---\n\n## 🛠 Tech Stack\n\n| Layer | Technology | Purpose |\n|---|---|---|\n| ⚛️ **UI** | React 19 + TypeScript | Component-based frontend |\n| ⚡ **Build** | Vite 6 | Lightning-fast dev server & bundler |\n| 🎨 **Styling** | Tailwind CSS v4 | Utility-first CSS |\n| 🔄 **State** | Redux Toolkit | Global state management |\n| 🎞️ **Animation** | Framer Motion + GSAP | Smooth UI animations |\n| 📈 **Charts** | Chart.js + Recharts + D3.js | Analytics & data visualizations |\n| 🗺️ **Routing** | React Router v6 | Client-side navigation |\n| 🟢 **Runtime** | Node.js 20 + Express 4 | REST API server |\n| 🍃 **Database** | MongoDB + Mongoose | Data storage & ODM |\n| 🤖 **AI** | OpenAI SDK + Google Generative AI | Story generation models |\n| 🔐 **Auth** | JWT + bcryptjs | Token-based auth & password hashing |\n| 📧 **Email** | Nodemailer | SMTP email delivery |\n| 🔌 **Realtime** | Socket.IO | WebSocket notifications |\n| ✅ **Validation** | Zod | Runtime schema validation |\n| 📝 **Logging** | Winston | Structured server logs |\n\n---\n\n## 📁 Project Structure\n\n```\nstory-spark-ai\u002F                 # Monorepo root (npm workspaces)\n├── frontend\u002F                   # React 19 + Vite SPA\n│   ├── index.html\n│   ├── vite.config.ts\n│   ├── tailwind.config.ts\n│   ├── .env.example\n│   └── src\u002F\n│       ├── App.tsx             # Root component & route setup\n│       ├── main.tsx            # Entry point\n│       ├── assets\u002F             # Static assets (images, fonts)\n│       ├── components\u002F         # Reusable UI components\n│       ├── constants\u002F          # App-wide constants\n│       ├── error\u002F              # Error boundary components\n│       ├── helpers\u002F            # Utility helper functions\n│       ├── hooks\u002F              # Custom React hooks\n│       ├── models\u002F             # Frontend data models \u002F types\n│       ├── redux\u002F              # Redux Toolkit slices & store\n│       ├── services\u002F           # API service layer (axios)\n│       ├── socket\u002F             # Socket.IO client setup\n│       ├── types\u002F              # TypeScript type definitions\n│       └── utils\u002F              # General utilities\n├── backend\u002F                    # Express + TypeScript API\n│   ├── vercel.json             # Vercel serverless config\n│   ├── .env.example\n│   ├── scripts\u002F\n│   │   └── seed-admin.ts       # Admin user seeding script\n│   ├── ml\u002F                     # ML \u002F AI model helpers\n│   └── src\u002F\n│       ├── server.ts           # Entry point\n│       ├── app.ts              # Express app setup\n│       ├── app\u002F                # App-level bootstrap modules\n│       ├── config\u002F             # Configuration (DB, env)\n│       ├── constants\u002F          # Shared backend constants\n│       ├── controllers\u002F        # Route handler functions\n│       ├── enums\u002F              # TypeScript enums\n│       ├── errors\u002F             # Custom error classes\n│       ├── interfaces\u002F         # TypeScript interfaces\n│       ├── router\u002F             # Express router aggregator\n│       ├── routes\u002F             # Individual route files\n│       ├── services\u002F           # Business logic & AI calls\n│       ├── shared\u002F             # Shared utilities\u002Fmiddleware\n│       ├── socket\u002F             # Socket.IO server setup\n│       ├── types\u002F              # Backend type definitions\n│       └── utils\u002F              # Helper utilities\n├── package.json                # Root workspaces config\n├── pnpm-workspace.yaml\n└── pnpm-lock.yaml\n```\n\n---\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nMake sure you have the following installed:\n\n- **Node.js** `18.18+` (recommended: `20.x`)\n- **npm** `9+` or **pnpm** `9+`\n- **MongoDB** URI — [MongoDB Atlas](https:\u002F\u002Fwww.mongodb.com\u002Fcloud\u002Fatlas) (free tier works great)\n- API keys for **OpenAI** and\u002For **Google Gemini** (see [Environment Variables](#environment-variables))\n\n### Installation\n\n```bash\n# 1. Clone the repository\ngit clone https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai.git\ncd story-spark-ai\n\n# 2. Install all dependencies (npm workspaces — single install)\nnpm install\n```\n\n### Environment Variables\n\nCopy the example env files and fill in your values:\n\n```bash\ncp backend\u002F.env.example  backend\u002F.env\ncp frontend\u002F.env.example frontend\u002F.env\n```\n\n> ⚠️ **Never commit** `backend\u002F.env` or `frontend\u002F.env`. Only `.env.example` files belong in git.\n\n#### Backend — `backend\u002F.env`\n\n| Variable | Required | Description |\n|---|---|---|\n| `DATABASE_URL` | ✅ Yes | MongoDB connection string ([Atlas](https:\u002F\u002Fwww.mongodb.com\u002Fcloud\u002Fatlas) or local) |\n| `PORT` | No | API port (default `5000`) |\n| `NODE_ENV` | No | `development` or `production` |\n| `CORS_ORIGINS` | No | Comma-separated allowed frontend URLs (e.g. `http:\u002F\u002Flocalhost:4001`) |\n| `SALT_ROUNDS` | ✅ Yes | bcrypt cost factor (e.g. `10`) |\n| `JWT_SECRET` | ✅ Yes | Access token signing secret |\n| `JWT_REFRESH_SECRET` | ✅ Yes | Refresh token signing secret |\n| `JWT_EXPIRES_IN` | ✅ Yes | Access token lifetime (e.g. `60d`) |\n| `JWT_REFRESH_EXPIRES_IN` | ✅ Yes | Refresh token lifetime (e.g. `120d`) |\n| `DEFAULT_ADMIN_PASSWORD` | ✅ Yes | Initial admin password for seeding |\n| `OPEN_AI_KEY` | For OpenAI | [OpenAI API key](https:\u002F\u002Fplatform.openai.com\u002Fapi-keys) |\n| `GEMINI_API_KEY` | For Gemini | [Google AI Studio key](https:\u002F\u002Faistudio.google.com\u002Fapikey) |\n| `UNSPLASH_KEY_API` | For images | [Unsplash Access Key](https:\u002F\u002Funsplash.com\u002Fdevelopers) |\n| `UNSPLASH_KEY_API_SECRET` | For images | Unsplash secret |\n| `VERIFY_EMAIL` | For email | SMTP sender address |\n| `VERIFY_PASSWORD` | For email | SMTP password or app password |\n| `GOOGLE_CLIENT_ID` | For Google login | [Google Cloud Console](https:\u002F\u002Fconsole.cloud.google.com) |\n\n#### Frontend — `frontend\u002F.env`\n\n| Variable | Required | Description |\n|---|---|---|\n| `VITE_BASE_URL` | ✅ Yes | API base URL (e.g. `http:\u002F\u002Flocalhost:5000\u002Fapi\u002Fv1`) |\n| `VITE_SOCKET_URL` | No | Socket.IO server URL for real-time notifications |\n| `VITE_GOOGLE_CLIENT_ID` | ✅ Yes | [Google Cloud Console](https:\u002F\u002Fconsole.cloud.google.com) OAuth Client ID |\n\n### Running Locally\n\n**Step 1 — Seed the admin user** *(first time only)*\n\nBefore starting the server for the first time, create an admin account:\n\n```bash\ncd backend\nnpx ts-node scripts\u002Fseed-admin.ts\n```\n\nMake sure `DEFAULT_ADMIN_PASSWORD` and `ADMIN_EMAIL` are set in `backend\u002F.env`.\n\n**Step 2 — Start development servers**\n\n```bash\n# Run both frontend & backend concurrently (from repo root)\nnpm run dev\n\n# Or run individually:\nnpm run dev:backend    # API on http:\u002F\u002Flocalhost:5000\nnpm run dev:frontend   # Vite on http:\u002F\u002Flocalhost:4001\n```\n\n**Step 3 — Production build**\n\n```bash\nnpm run build\nnpm run start:backend    # requires build:backend first\nnpm run start:frontend   # serves built static app (preview)\n```\n\n---\n\n## ☁️ Deployment (Vercel)\n\nThis monorepo deploys as **two separate Vercel projects**:\n\n| Project | Root Directory | Example Domain |\n|---|---|---|\n| 🖥️ Frontend | `frontend` | `storyspark.ai` |\n| ⚙️ Backend API | `backend` | `api.storyspark.ai` |\n**Frontend environment variables** *(set in Vercel dashboard → redeploy after changes)*:\n\n```env\nVITE_BASE_URL=https:\u002F\u002F\u003Cyour-api>.vercel.app\u002Fapi\u002Fv1\nVITE_SOCKET_URL=https:\u002F\u002F\u003Cyour-persistent-socket-host>\nVITE_GOOGLE_CLIENT_ID=\u003Cyour-google-client-id>\n```\n\n> ⚠️ **Do NOT** point `VITE_SOCKET_URL` at your Vercel API URL — Vercel serverless functions cannot run persistent Socket.IO connections, which causes endless `\u002Fsocket.io\u002F` 404 logs. Use a dedicated host (e.g. Render, Railway) for the Socket.IO server.\n\n**Backend environment variables**: Set `DATABASE_URL`, JWT secrets, AI keys, and add your frontend domain to `CORS_ORIGINS`.\n\n**Git**: Use a **single** repository root (one `.git` folder). Do not nest another `.git` inside `frontend\u002F` or `backend\u002F`.\n\n---\n\n## 🤝 Contributing\n\nContributions make the open-source community such an amazing place to **learn, inspire, and create**. All contributions are genuinely appreciated! 🙌\n\n### How to Contribute\n\n```bash\n# 1. Fork this repository on GitHub\n# 2. Clone your fork\ngit clone https:\u002F\u002Fgithub.com\u002F\u003Cyour-username>\u002Fstory-spark-ai.git\ncd story-spark-ai\n\n# 3. Create a feature branch\ngit checkout -b feat\u002Fyour-amazing-feature\n\n# 4. Install dependencies & configure env files\nnpm install\n\n# 5. Make your changes, then commit\ngit add .\ngit commit -m \"feat: add your amazing feature\"\n\n# 6. Push and open a Pull Request\ngit push origin feat\u002Fyour-amazing-feature\n```\n\nPlease read [CONTRIBUTING.md](.\u002FCONTRIBUTING.md) for detailed guidelines, and [CODE_OF_CONDUCT.md](.\u002FCODE_OF_CONDUCT.md) before contributing.\n\n---\n\n## 🌟 Contributors\n\nThanks to everyone who has helped build **Story Spark AI**! 💜\n\n\u003C!-- CONTRIBUTORS:START -->\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\n      \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fronisarkarexe\">\n        \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fronisarkarexe.png\" width=\"90\" style=\"border-radius:50%\" alt=\"ronisarkarexe\" \u002F>\n        \u003Cbr \u002F>\u003Csub>\u003Cb>Roni Sarkar\u003C\u002Fb>\u003C\u002Fsub>\n      \u003C\u002Fa>\n      \u003Cbr \u002F>\u003Csub>🔧 Maintainer\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmzl2233\">\n        \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fmzl2233.png\" width=\"90\" style=\"border-radius:50%\" alt=\"mzl2233\" \u002F>\n        \u003Cbr \u002F>\u003Csub>\u003Cb>mzl2233\u003C\u002Fb>\u003C\u002Fsub>\n      \u003C\u002Fa>\n      \u003Cbr \u002F>\u003Csub>💻 Contributor\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Famrendrasharma1328-a11y\">\n        \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Famrendrasharma1328-a11y.png\" width=\"90\" style=\"border-radius:50%\" alt=\"amrendrasharma1328-a11y\" \u002F>\n        \u003Cbr \u002F>\u003Csub>\u003Cb>Amrendra Sharma\u003C\u002Fb>\u003C\u002Fsub>\n      \u003C\u002Fa>\n      \u003Cbr \u002F>\u003Csub>💻 Contributor\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FSwetanegi05\">\n        \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FSwetanegi05.png\" width=\"90\" style=\"border-radius:50%\" alt=\"Swetanegi05\" \u002F>\n        \u003Cbr \u002F>\u003Csub>\u003Cb>Sweta Negi\u003C\u002Fb>\u003C\u002Fsub>\n      \u003C\u002Fa>\n      \u003Cbr \u002F>\u003Csub>💻 Contributor\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frajdeep-yadav\">\n        \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Frajdeep-yadav.png\" width=\"90\" style=\"border-radius:50%\" alt=\"rajdeep-yadav\" \u002F>\n        \u003Cbr \u002F>\u003Csub>\u003Cb>Rajdeep\u003C\u002Fb>\u003C\u002Fsub>\n      \u003C\u002Fa>\n      \u003Cbr \u002F>\u003Csub>💻 Contributor\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharanbalaji2005\">\n        \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fcharanbalaji2005.png\" width=\"90\" style=\"border-radius:50%\" alt=\"charanbalaji2005\" \u002F>\n        \u003Cbr \u002F>\u003Csub>\u003Cb>Charan Balaji\u003C\u002Fb>\u003C\u002Fsub>\n      \u003C\u002Fa>\n      \u003Cbr \u002F>\u003Csub>ScrollFAB, Mobile Nav, UI Components\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"https:\u002F\u002Fvia.placeholder.com\u002F90\u002F6c3ff7\u002Fffffff?text=P.H\" width=\"90\" style=\"border-radius:50%\" alt=\"P. Harshini\" \u002F>\n      \u003Cbr \u002F>\u003Csub>\u003Cb>P. Harshini Padmavathi\u003C\u002Fb>\u003C\u002Fsub>\n      \u003Cbr \u002F>\u003Csub>💻 Contributor\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\u003C!-- CONTRIBUTORS:END -->\n\n---\n\n## 📄 License\n\nThis project is licensed under the **MIT License** — see the [LICENSE](.\u002FLICENSE) file for full details.\n\n```\nMIT License — free to use, modify, and distribute.\n```\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg?style=for-the-badge)](.\u002FLICENSE)\n\n---\n\n## 💙 Support\n\nIf you find **StorySpark AI** useful, please consider:\n\n- ⭐ **Starring** the repository — it helps others discover the project!\n- 🐛 **Reporting bugs** via [GitHub Issues](https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fissues)\n- 💡 **Suggesting features** in [Discussions](https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fdiscussions)\n- 🤝 **Contributing** code, docs, or tests\n\n> *Thank you for being part of the StorySpark AI community. Happy writing! 🚀✨*\n\n\u003Cdiv align=\"center\">\n\n---\n\nMade with ❤️ by the [StorySpark AI community](https:\u002F\u002Fgithub.com\u002Fronisarkarexe\u002Fstory-spark-ai\u002Fgraphs\u002Fcontributors)\n\n\u003C\u002Fdiv>\n","StorySpark AI 是一个开源平台，旨在帮助创意人士根据单一提示生成并分享多种故事变体。该项目使用 TypeScript 构建，并结合了 React 和 Tailwind CSS 等现代前端技术，确保了良好的用户体验和界面设计。它支持通过 OpenAI 和 Gemini 的 AI 技术来生成故事内容，使得用户能够轻松探索无限的故事可能性。StorySpark AI 适合于需要灵感激发的作家、编剧或是任何对故事创作感兴趣的人士，在教育、娱乐甚至个人创作等多个场景下都能发挥重要作用。","2026-06-11 04:07:48","trending"]