{"id":42243969,"url":"https://github.com/enxtur/interview-aloud","last_synced_at":"2026-01-27T04:20:29.172Z","repository":{"id":329193535,"uuid":"1118511499","full_name":"enxtur/interview-aloud","owner":"enxtur","description":"A speaking-first technical interview practice app that helps you rehearse clear answers out loud, one sentence at a time.","archived":false,"fork":false,"pushed_at":"2026-01-22T09:47:19.000Z","size":1045,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-23T00:18:42.892Z","etag":null,"topics":["interview","interview-practice","interview-preparation","shadowing","shadowing-method"],"latest_commit_sha":null,"homepage":"https://interview-aloud.tech","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/enxtur.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"github":["enxtur"]}},"created_at":"2025-12-17T21:41:08.000Z","updated_at":"2026-01-22T09:47:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/enxtur/interview-aloud","commit_stats":null,"previous_names":["enxtur/interview-aloud"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/enxtur/interview-aloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enxtur%2Finterview-aloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enxtur%2Finterview-aloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enxtur%2Finterview-aloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enxtur%2Finterview-aloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enxtur","download_url":"https://codeload.github.com/enxtur/interview-aloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enxtur%2Finterview-aloud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28801933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T03:44:14.111Z","status":"ssl_error","status_checked_at":"2026-01-27T03:43:33.507Z","response_time":168,"last_error":"SSL_read: 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":["interview","interview-practice","interview-preparation","shadowing","shadowing-method"],"created_at":"2026-01-27T04:20:28.167Z","updated_at":"2026-01-27T04:20:29.166Z","avatar_url":"https://github.com/enxtur.png","language":"TypeScript","funding_links":["https://github.com/sponsors/enxtur"],"categories":[],"sub_categories":[],"readme":"# Interview Aloud\n\n**Interview Aloud** is a lightweight, browser-based tool for practicing technical interview answers out loud. Master your interview skills by rehearsing clear, concise answers one sentence at a time.\n\n[🌐 Live Demo](https://interview-aloud.tech/) • [📖 Contributing Guide](CONTRIBUTING.md) • [📄 License](LICENSE)\n\n## Features\n\n- **Curated Interview Questions** - Carefully selected technical interview questions with model answers\n- **Sentence-by-Sentence Playback** - Practice answers one sentence at a time using text-to-speech\n- **Keyboard-Friendly** - Full keyboard navigation for distraction-free practice\n- **Progress Tracking** - Visual progress bar and sentence counter\n- **Difficulty Levels** - Topics categorized as easy, medium, or hard\n- **Topic Tags** - Find related topics quickly with tags\n- **Auto-Advance** - Automatically moves to the next sentence after playback\n- **Privacy-First** - No backend, no accounts, no tracking - everything runs in your browser\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js (v18 or higher)\n- npm (comes with Node.js)\n\n### Installation\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/enxtur/interview-aloud.git\n   cd interview-aloud\n   ```\n\n2. Install dependencies:\n   ```bash\n   npm install\n   ```\n\n3. Start the development server:\n   ```bash\n   npm run dev\n   ```\n\n4. Open your browser and navigate to the URL shown in your terminal (usually `http://localhost:3000`)\n\n## Available Scripts\n\n- `npm run dev` - Start the development server with hot reload\n- `npm run build` - Build the project for production\n- `npm run start` - Start the production server\n- `npm run lint` - Run ESLint to check code quality\n\n## Usage\n\n### Getting Started\n\n1. Browse the topic list on the homepage\n2. Click on any topic card to start practicing\n3. Read the question and current sentence\n4. Click \"Speak\" or press `Space` to hear the sentence read aloud\n5. Use navigation buttons or arrow keys to move between sentences\n6. Press `Esc` to return to the topic list\n\n### Keyboard Shortcuts\n\nDuring practice sessions:\n\n- **`Space`** - Play the current sentence\n- **`←` / `→`** - Navigate to previous/next sentence\n- **`Esc`** - Exit practice and return to topic list\n\n### Practice Flow\n\nEach practice session displays:\n- The interview question at the top\n- The current sentence in a highlighted box\n- Progress bar showing your position\n- Navigation controls (Previous, Speak, Next)\n- Sentence counter (e.g., \"3 / 8\")\n\nThe app automatically advances to the next sentence after a short pause, helping you practice the full answer flow.\n\n## Project Structure\n\n```\ninterview-aloud/\n├── src/\n│   └── app/\n│       ├── components/      # React components\n│       ├── data/            # Interview topics (markdown files)\n│       │   └── *.md         # Topic files with frontmatter\n│       ├── hooks/           # Custom React hooks\n│       ├── libs/            # Utility functions and types\n│       ├── layout.tsx       # Root layout\n│       ├── page.tsx         # Homepage\n│       ├── topics/          # Topic pages (dynamic routes)\n│       ├── globals.css      # Global styles\n│       └── sitemap.ts       # Sitemap generator\n├── public/              # Static assets\n└── package.json         # Project dependencies and scripts\n```\n\n## Data Model\n\nTopics are stored as markdown files in `src/app/data/` using frontmatter for metadata and the body for answer sentences.\n\nEach topic file (`*.md`) follows this structure:\n\n```markdown\n---\nid: topic-slug\ntitle: Topic Title\nquestion: What is the interview question?\ntags: [tag1, tag2]\ndifficulty: easy | medium | hard\nkeywords: [Keyword1, Keyword2]\n---\nFirst sentence of the answer.\nSecond sentence of the answer.\nThird sentence of the answer.\n```\n\n**Frontmatter fields:**\n- `id` - Unique identifier in kebab-case (used as URL slug)\n- `title` - Display title\n- `question` - The interview question\n- `tags` - Array of tags for categorization\n- `difficulty` - One of \"easy\", \"medium\", or \"hard\"\n- `keywords` - Array of keywords for search\n\n**Body:**\n- Each line represents one sentence of the answer (3-8 sentences total)\n- Sentences are separated by newlines\n\n### Adding New Topics\n\nTo add a new interview topic:\n\n1. Create a new markdown file in `src/app/data/` (e.g., `my-topic.md`)\n2. Use a unique filename that matches your topic's slug (kebab-case)\n3. Add frontmatter with all required fields\n4. Write answer sentences in the body (one per line)\n5. Follow the existing structure and guidelines:\n   - Keep answers concise (3-8 sentences)\n   - Write in a conversational, interview-friendly tone\n   - Ensure each sentence can stand alone when read aloud\n   - Use a unique `id` in kebab-case\n   - Add relevant `tags` for discoverability\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines on adding topics and contributing to the project.\n\n## Technology Stack\n\n- **Next.js 16** - React framework with app router\n- **React 19** - UI framework\n- **TypeScript** - Type safety\n- **Tailwind CSS** - Utility-first CSS framework\n- **Web Speech API** - Browser text-to-speech\n\n## Contributing\n\nWe welcome contributions! Whether you want to add new topics, fix bugs, improve code, or enhance documentation, your help is appreciated.\n\nPlease read our [Contributing Guide](CONTRIBUTING.md) for:\n- Ways to contribute\n- Development setup instructions\n- Code style guidelines\n- Pull request process\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\nBuilt to help engineers speak clearly and confidently about core technical topics under interview conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenxtur%2Finterview-aloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenxtur%2Finterview-aloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenxtur%2Finterview-aloud/lists"}