{"id":30575919,"url":"https://github.com/shepe1304/odyscribe","last_synced_at":"2026-04-13T06:02:44.408Z","repository":{"id":306539596,"uuid":"1026524282","full_name":"Shepe1304/odyscribe","owner":"Shepe1304","description":"Odyscribe – A journaling app that turns your thoughts into chapters of your hero’s journey. Write entries, generate story-like chapters with AI, listen back with immersive narration, and track your growth along the way.","archived":false,"fork":false,"pushed_at":"2025-08-26T02:53:37.000Z","size":2232,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-26T04:36:18.992Z","etag":null,"topics":["ai","elevenlabs","elevenlabs-api","hackathon-project","journaling","nebius","nextjs","react","shadcn-ui","storytelling","supabase","tailwindcss","text-to-speech","typescript","vercel"],"latest_commit_sha":null,"homepage":"https://odyscribe.vercel.app","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/Shepe1304.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}},"created_at":"2025-07-26T04:17:31.000Z","updated_at":"2025-08-26T02:53:41.000Z","dependencies_parsed_at":"2025-07-27T14:32:30.104Z","dependency_job_id":null,"html_url":"https://github.com/Shepe1304/odyscribe","commit_stats":null,"previous_names":["shepe1304/hero-journaling-app","shepe1304/odyscribe"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Shepe1304/odyscribe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shepe1304%2Fodyscribe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shepe1304%2Fodyscribe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shepe1304%2Fodyscribe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shepe1304%2Fodyscribe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Shepe1304","download_url":"https://codeload.github.com/Shepe1304/odyscribe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shepe1304%2Fodyscribe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31741541,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T05:13:27.074Z","status":"ssl_error","status_checked_at":"2026-04-13T05:13:25.150Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ai","elevenlabs","elevenlabs-api","hackathon-project","journaling","nebius","nextjs","react","shadcn-ui","storytelling","supabase","tailwindcss","text-to-speech","typescript","vercel"],"created_at":"2025-08-29T00:39:02.167Z","updated_at":"2026-04-13T06:02:44.373Z","avatar_url":"https://github.com/Shepe1304.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hero Journaling App (Odyscribe)\n\nTurn your life into an epic story. **Odyscribe** is a fantasy-themed journaling web app that transforms your daily reflections into immersive, AI-generated narrative chapters—complete with mood tracking, markdown support, and narration.\n\n- **DevPost Submission:** [https://devpost.com/software/odyscribe-your-hero-journaling-app](https://devpost.com/software/odyscribe-your-hero-journaling-app)\n- **Video Demo:** [https://youtu.be/WCHQDXtUd4I](https://youtu.be/WCHQDXtUd4I)\n \n---\n\n## ✨ Features\n\n- **Fantasy-Themed Journaling:** Write daily entries with mood selection and markdown formatting\n- **AI-Powered Chapters:** Convert your journal entries into narrative chapters using AI, with selectable story tone and narrator persona\n- **Storybook:** Collect and revisit your generated chapters in a personal storybook\n- **Narration Mode:** Listen to your chapters with voice narration and background music\n- **Dashboard:** View, search, and filter your entries by mood, date, or title\n- **Profile \u0026 Stats:** Track your journaling streak, entry/chapter stats, and recent activity\n- **Authentication:** Secure sign up, login, and session management via Supabase\n- **Responsive Design:** Optimized for desktop and mobile\n\n---\n\n## 🛠️ Tech Stack\n\n- **Framework:** Next.js 15 (App Router, React 19, Turbopack)\n- **Database \u0026 Auth:** [Supabase](https://supabase.com/)\n- **AI Integration:** OpenAI (via Nebius API)\n- **UI Framework:** Tailwind CSS with tailwindcss-animate\n- **Components:** Radix UI primitives (Select, Tabs, Dropdown, etc.)\n- **Icons:** Lucide React\n- **Deployment:** Vercel/Netlify (or any Node.js host)\n\n---\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js v18+\n- npm or yarn\n- Supabase project (for DB \u0026 Auth)\n- Nebius API key (for AI chapter generation)\n\n### Installation\n\n1. **Clone the repository:**\n\n   ```bash\n   git clone https://github.com/your-username/odyscribe.git\n   cd odyscribe\n   ```\n\n2. **Install dependencies:**\n\n   ```bash\n   npm install\n   # or\n   yarn install\n   ```\n\n3. **Configure environment variables:**\n\n   - Copy `.env.example` to `.env.local` and fill in your credentials:\n     ```env\n     NEXT_PUBLIC_SUPABASE_URL=your_supabase_url\n     NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key\n     NEXT_PUBLIC_ELEVENLABS_API_KEY=your_elevenlabs_api_key\n     NEBIUS_API_KEY=your_nebius_api_key\n     ```\n\n4. **Set up the database:**\n\n   - Run the SQL schema in your Supabase project (see [Database Schema](#database-schema))\n\n5. **Run the development server:**\n\n   ```bash\n   npm run dev\n   # or\n   yarn dev\n   ```\n\n6. **Open your browser:**\n   - Visit [http://localhost:3000](http://localhost:3000)\n\n---\n\n## 📁 Project Structure\n\n```\nodyscribe/\n├── app/                     # Next.js app directory (routing, pages, API)\n│   ├── api/                 # API routes (AI chapter generation)\n│   ├── auth/                # Authentication pages (login, sign-up)\n│   ├── chapter/             # Chapter generation \u0026 display\n│   ├── dashboard/           # Main dashboard\n│   ├── entry/               # Journal entry CRUD operations\n│   ├── landing/             # Marketing/landing page\n│   ├── profile/             # User profile \u0026 statistics\n│   ├── protected/           # Protected route components\n│   ├── storybook/           # Chapter collection and reading\n│   ├── utils/               # Utility functions\n│   ├── globals.css          # Global styles and Tailwind imports\n│   ├── layout.tsx           # Root layout component\n│   └── page.tsx             # Home page\n├── components/              # Reusable UI and logic components\n├── lib/                     # Supabase client, middleware, utilities\n├── public/                  # Static assets (favicon, images)\n├── .env.example             # Example environment variables\n├── components.json          # Radix UI configuration\n├── middleware.ts            # Next.js middleware for auth\n├── next.config.ts           # Next.js configuration\n├── package.json             # Dependencies and scripts\n├── tailwind.config.ts       # Tailwind CSS configuration\n└── tsconfig.json            # TypeScript configuration\n```\n\n---\n\n## 🎭 Key Concepts\n\n- **Journal Entries:** Write daily reflections, select a mood, and use markdown for rich formatting\n- **Chapters:** Transform entries into narrative chapters using AI. Choose from different story tones and narrator personas (e.g., Wise Sage, Cheeky Bard)\n- **Storybook:** Your generated chapters are collected in a personal storybook for easy reading and listening\n- **Narration:** Listen to your chapters with built-in narration mode and background music\n- **Authentication:** All user data is private and secured via Supabase Auth with RLS policies\n\n---\n\n## 🗄️ Database Schema\n\nThe app uses two main tables in Supabase:\n\n### journal_entries\n\n```sql\ncreate table public.journal_entries (\n  id uuid not null default gen_random_uuid (),\n  user_id uuid null,\n  title text null,\n  content text not null,\n  mood text null,\n  created_at timestamp with time zone null default now(),\n  updated_at timestamp with time zone null default now(),\n  has_chapter boolean null,\n  cover_art text null,\n  constraint journal_entries_pkey primary key (id),\n  constraint journal_entries_user_id_fkey foreign KEY (user_id) references auth.users (id) on delete CASCADE\n) TABLESPACE pg_default;\n```\n\n### journal_chapters\n\n```sql\ncreate table public.journal_chapters (\n  id uuid not null default gen_random_uuid (),\n  entry_id uuid null,\n  user_id uuid null,\n  title text null,\n  content text null,\n  story_tone text null,\n  narrator text null,\n  status text null default 'draft'::text,\n  created_at timestamp with time zone null default now(),\n  updated_at timestamp with time zone null default now(),\n  summary text null,\n  constraint journal_chapters_pkey primary key (id),\n  constraint journal_chapters_entry_id_fkey foreign KEY (entry_id) references journal_entries (id) on delete CASCADE,\n  constraint journal_chapters_user_id_fkey foreign KEY (user_id) references auth.users (id) on delete CASCADE\n);\n```\n\n---\n\n## 🔧 Environment Variables\n\nCreate a `.env.local` file with the following variables:\n\n```env\n# Supabase Configuration\nNEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url\nNEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key\n\n# Expressive Text-To-Speech Integration\nNEXT_PUBLIC_ELEVENLABS_API_KEY=your_elevenlabs_api_key\n\n# AI Integration\nNEBIUS_API_KEY=your_nebius_api_key\n```\n\nSee [.env.example](.env.example) for the template.\n\n---\n\n## 📜 Available Scripts\n\n- `npm run dev` — Start development server with Turbopack\n- `npm run build` — Build for production\n- `npm run start` — Start production server\n- `npm run lint` — Lint code with ESLint\n\n---\n\n## 🎨 UI Components\n\nThe app uses a modern component architecture with:\n\n- **Radix UI Primitives:** Accessible, unstyled components\n- **Tailwind CSS:** Utility-first styling with custom animations\n- **Responsive Design:** Mobile-first approach with Tailwind breakpoints\n\n---\n\n## 🤖 AI Integration\n\nOdyscribe uses OpenAI models through the Nebius API to:\n\n- Transform journal entries into narrative chapters\n- Support multiple story tones (epic, whimsical, dramatic, etc.)\n- Generate content with different narrator personalities\n- Create chapter summaries for quick reference\n\n---\n\n## 🔐 Authentication \u0026 Security\n\n- **Supabase Auth:** Handles user registration, login, and session management\n- **Row Level Security (RLS):** Ensures users can only access their own data\n- **Middleware Protection:** Server-side route protection for authenticated pages\n- **Type Safety:** Full TypeScript support for secure development\n\n---\n\n## 🚀 Deployment\n\nThe app is optimized for deployment on:\n\n- **Vercel** (recommended for Next.js apps)\n- **Netlify**\n- Any Node.js hosting provider\n\nMake sure to set your environment variables in your deployment platform.\n\n---\n\n## 🤝 Contributing\n\nPull requests and issues are welcome! Please:\n\n1. Open an issue to discuss your idea or bug before submitting a PR\n2. Follow the existing code style and conventions\n3. Test your changes thoroughly\n4. Update documentation as needed\n\n---\n\n## 📄 License\n\nMIT License - feel free to use this project for personal or commercial purposes.\n\n---\n\n**Odyscribe** — Journal your journey. Become the hero of your own story. ⚔️✨\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshepe1304%2Fodyscribe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshepe1304%2Fodyscribe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshepe1304%2Fodyscribe/lists"}