{"id":26336088,"url":"https://github.com/meeksonjr/story-time","last_synced_at":"2025-03-16T01:16:34.510Z","repository":{"id":263968573,"uuid":"891945503","full_name":"MeeksonJr/story-time","owner":"MeeksonJr","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-21T08:40:53.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-21T09:31:16.303Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://story-time-six.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/MeeksonJr.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}},"created_at":"2024-11-21T08:39:02.000Z","updated_at":"2024-11-21T08:43:32.000Z","dependencies_parsed_at":"2024-11-21T09:41:31.079Z","dependency_job_id":null,"html_url":"https://github.com/MeeksonJr/story-time","commit_stats":null,"previous_names":["meeksonjr/story-time"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeeksonJr%2Fstory-time","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeeksonJr%2Fstory-time/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeeksonJr%2Fstory-time/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeeksonJr%2Fstory-time/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MeeksonJr","download_url":"https://codeload.github.com/MeeksonJr/story-time/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243809876,"owners_count":20351407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2025-03-16T01:16:34.044Z","updated_at":"2025-03-16T01:16:34.504Z","avatar_url":"https://github.com/MeeksonJr.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StoryTime App\n\nThis is a **StoryTime** app built using **Next.js**. It allows users to upload stories, select reading styles, and listen to them. The app utilizes modern libraries and tools to provide a seamless user experience. This includes authentication through **Clerk**, **Drizzle** and **Neon databases** for data storage, and **ShadCN** and **Lucid React** for UI components.\n\n## Table of Contents\n\n- [Technologies Used](#technologies-used)\n- [Features](#features)\n- [Setup Instructions](#setup-instructions)\n- [Database Configuration](#database-configuration)\n- [Authentication](#authentication)\n- [File Upload and Text-to-Speech](#file-upload-and-text-to-speech)\n- [UI Components](#ui-components)\n- [Contributing](#contributing)\n\n## Technologies Used\n\n- **Next.js** - The core framework for building the app with server-side rendering and API routes.\n- **Clerk** - Authentication for user login, registration, and session management.\n- **ShadCN** - A UI component library for building beautiful, accessible interfaces.\n- **Lucid React** - Used for icons and UI components.\n- **Drizzle** - A lightweight ORM for managing and interacting with the database.\n- **Neon Database** - A cloud-native database service used for storage and data management.\n- **JavaScript \u0026 TypeScript** - The codebase is written in both JavaScript and TypeScript for type safety and better developer experience.\n\n## Features\n\n- **File Upload**: Allows users to upload PDF, DOCX, and TXT files to the app.\n- **Text-to-Speech**: Converts the uploaded file's text content into speech with customizable voice styles, tones, and speeds.\n- **User Authentication**: Provides user authentication through Clerk, allowing users to log in and access their uploaded stories.\n- **Reading Style Selector**: Users can customize the voice style, tone, and speed of the reading.\n- **Preview Functionality**: Preview the reading style and speed before applying the settings.\n- **Alert Notifications**: After a file is uploaded successfully, users will receive a notification with their story details.\n\n## Setup Instructions\n\n1. **Clone the repository**:\n   ```bash\n   git clone https://github.com/MeeksonJr/story-time.git\n   cd story-time\nInstall dependencies: Make sure to have Node.js installed. Then run:\n\nbash\nCopy code\nnpm install\nSet up environment variables: Create a .env.local file in the root of the project and add the necessary environment variables for Clerk, Neon, and any other services:\n\n## env\n```\nNEXT_PUBLIC_CLERK_FRONTEND_API=\u003cyour-clerk-frontend-api\u003e\nCLERK_API_KEY=\u003cyour-clerk-api-key\u003e\nNEON_DB_URL=\u003cyour-neon-database-url\u003e\n\n```\n## Run the development server:\n```\nnpm run dev\nVisit the app: Open http://localhost:3000 in your browser to view the app.\n```\n## Database Configuration\nThe app uses Neon Database for cloud-native data storage. The Drizzle ORM is utilized to manage database queries and operations.\n\n## Neon Database: Create an account on Neon (https://neon.tech/) and set up your database.\nDrizzle ORM: Drizzle interacts with the Neon database to persist the uploaded files and user data. Make sure to configure the database connection properly in the .env.local file.\n## Authentication\nThe app uses Clerk for user authentication. Users can sign in using their credentials, and the app ensures that only authenticated users can save and access their uploaded files.\n\n## Clerk Authentication Features:\n- Sign Up: New users can create an account and start using the app.\n- Sign In: Existing users can sign in with their email or social accounts.\n- Session Management: Clerk handles the session state and manages the user's authentication flow.\n### File Upload and Text-to-Speech\nUsers can upload their stories in PDF, DOCX, or TXT formats. Once uploaded, the app processes the text content of the file and allows users to listen to it.\n\n## File Upload: Handled by the FileUpload component. Users can drag and drop files or select them from their device.\n- Text Processing: The uploaded file's text is extracted, and the app converts the content to speech using the current reading style settings.\n- Text-to-Speech Settings: Users can adjust the voice style, tone, speed, and background effect.\n## UI Components\n- The app uses ShadCN and Lucid React for building modern UI components with great accessibility.\n\n## ShadCN: A component library that provides pre-designed UI elements.\n- Lucid React: An icon library used for icons like file upload and play buttons.\n\n## The UI includes:\n- File upload area with drag-and-drop functionality.\n- Reading style selector to adjust voice style, tone, speed, and background effects.\n- Notifications for successful file uploads.\n\n## Contributing\nWe welcome contributions to this project! If you'd like to contribute, please follow these steps:\n\n## Fork the repository.\n```\nCreate a new branch (git checkout).\nMake your changes and commit them (git commit).\nPush to your fork (git push origin)\nOpen a pull request to the main repository.\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeeksonjr%2Fstory-time","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeeksonjr%2Fstory-time","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeeksonjr%2Fstory-time/lists"}