{"id":51437491,"url":"https://github.com/azurespheredev/full-throttle-media-test","last_synced_at":"2026-07-05T08:02:24.785Z","repository":{"id":358893672,"uuid":"1069134592","full_name":"azurespheredev/full-throttle-media-test","owner":"azurespheredev","description":"A web app that allows users to paste in long text and get an AI generated summary.","archived":false,"fork":false,"pushed_at":"2025-10-03T15:42:19.000Z","size":149,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-19T15:56:20.801Z","etag":null,"topics":["app-router","nextjs","postgresql","prisma","shadcn-ui","tailwindcss","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/azurespheredev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-03T13:07:10.000Z","updated_at":"2025-11-25T09:01:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/azurespheredev/full-throttle-media-test","commit_stats":null,"previous_names":["azurespheredev/full-throttle-media-test"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/azurespheredev/full-throttle-media-test","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azurespheredev%2Ffull-throttle-media-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azurespheredev%2Ffull-throttle-media-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azurespheredev%2Ffull-throttle-media-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azurespheredev%2Ffull-throttle-media-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/azurespheredev","download_url":"https://codeload.github.com/azurespheredev/full-throttle-media-test/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azurespheredev%2Ffull-throttle-media-test/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35147199,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app-router","nextjs","postgresql","prisma","shadcn-ui","tailwindcss","typescript"],"created_at":"2026-07-05T08:02:24.080Z","updated_at":"2026-07-05T08:02:24.779Z","avatar_url":"https://github.com/azurespheredev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AI-Powered Text Summarizer\n\nA full-stack web application that allows users to paste long text and generate AI-powered summaries with selectable styles. Built with **Next.js 15**, **PostgreSQL (via Prisma)**, **Tailwind CSS**, and the **OpenAI API**.\n\n## 🚀 Features\n\n- **Text Summarization**\n  Paste long text and get a summary generated using OpenAI models.\n\n- **Summary Styles**\n  Choose between **Concise**, **Detailed**, and **Bullets** output formats.\n\n- **Persistence**\n  Summaries (original text + result + metadata) are stored in PostgreSQL.\n\n- **Search \u0026 Filter**\n  Query summaries by text content, summary text, or style.\n\n- **Pagination**\n  Infinite scroll / “Load More” support with cursor-based pagination.\n\n- **Rate Limiting**\n  Basic per-IP guard against abuse.\n\n- **Markdown Rendering**\n  Summaries are rendered with proper formatting (bold, lists, code blocks, etc.).\n\n## 🛠️ Tech Stack\n\n- **Frontend**: Next.js 15 (App Router), React 19, TailwindCSS 4, ShadCN UI\n- **Backend**: Next.js API routes (`app/api/`)\n- **Database**: PostgreSQL with Prisma ORM\n- **AI Integration**: OpenAI API (Responses API)\n- **Validation**: Zod\n- **Other Utilities**: `react-markdown`, `remark-gfm`, `sonner` (toast), Lucide icons\n\n## ⚙️ Setup\n\n### 1. Clone and Install\n\n```bash\ngit clone https://github.com/azurespheredev/full-throttle-media-test.git\ncd full-throttle-media-test\npnpm install\n```\n\n### 2. Configure Environment\n\nCreate `.env` from `.env.example`:\n\n```bash\nOPENAI_API_KEY=\"your-openai-key\"\nOPENAI_MODEL=\"gpt-4o-mini\"\nDATABASE_URL=\"postgresql://postgres:password@localhost:5432/full_throttle_media\"\n```\n\n### 3. Database Migration\n\n```bash\npnpm postinstall\npnpm prisma:reset\npnpm prisma:migrate\n```\n\n### 4. Run Dev Server\n\n```bash\npnpm dev\n```\n\nVisit [http://localhost:3000](http://localhost:3000).\n\n## 📖 API Endpoints\n\n### `POST /api/summarize`\n\n- Body:\n\n  ```json\n  {\n    \"text\": \"long input text here\",\n    \"style\": \"concise\" | \"detailed\" | \"bullets\"\n  }\n  ```\n\n- Response: Saved summary object.\n\n### `GET /api/summaries`\n\n- Query params:\n\n  - `q`: search term\n  - `style`: CONCISE | DETAILED | BULLETS\n  - `cursor`: pagination cursor\n  - `limit`: max items (default 10, max 50)\n\n## 🧑‍💻 Notes\n\n- **Chunking**: Long inputs are split into ~8k-token chunks, summarized individually, then recombined.\n- **Rate Limiting**: Naive per-IP fixed window. Replace with Redis/Upstash for production-grade scaling.\n- **Markdown**: Summaries may include formatting (bold, lists, code) → rendered with `react-markdown`.\n- **DB Model**: Prisma `Summary` with fields: `id`, `text`, `summary`, `style`, `model`, `createdAt`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazurespheredev%2Ffull-throttle-media-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazurespheredev%2Ffull-throttle-media-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazurespheredev%2Ffull-throttle-media-test/lists"}