{"id":15171874,"url":"https://github.com/mitulagr2/phraseshift","last_synced_at":"2026-01-26T17:10:48.266Z","repository":{"id":254678123,"uuid":"847020981","full_name":"mitulagr2/phraseshift","owner":"mitulagr2","description":"A user-friendly transcript editor.","archived":false,"fork":false,"pushed_at":"2024-08-25T18:25:08.000Z","size":1485,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-27T16:22:47.209Z","etag":null,"topics":["bun","jest","postcss","react","tailwindcss","transcription","typescript"],"latest_commit_sha":null,"homepage":"https://phraseshift.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/mitulagr2.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-08-24T16:12:10.000Z","updated_at":"2024-09-09T02:00:01.000Z","dependencies_parsed_at":"2024-08-25T09:51:30.098Z","dependency_job_id":"a8cd5076-777a-4632-99d2-8a24cc653a32","html_url":"https://github.com/mitulagr2/phraseshift","commit_stats":{"total_commits":16,"total_committers":1,"mean_commits":16.0,"dds":0.0,"last_synced_commit":"d093b9e49a1e73a2f7f5356e1078bcfd54b7299a"},"previous_names":["mitulagr2/phraseshift"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitulagr2%2Fphraseshift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitulagr2%2Fphraseshift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitulagr2%2Fphraseshift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitulagr2%2Fphraseshift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mitulagr2","download_url":"https://codeload.github.com/mitulagr2/phraseshift/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239483870,"owners_count":19646426,"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":["bun","jest","postcss","react","tailwindcss","transcription","typescript"],"created_at":"2024-09-27T09:21:06.432Z","updated_at":"2025-11-06T05:30:25.358Z","avatar_url":"https://github.com/mitulagr2.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![PhraseShift Banner](https://github.com/user-attachments/assets/eaec063b-565d-4d30-a3e1-356a02a068e5)\n\n# PhraseShift\n\nA user-friendly transcript editor designed to provide a seamless experience for editing and syncing transcripts.\n\n## Demo\n\nhttps://github.com/user-attachments/assets/8da4c3c1-3710-4183-a088-12d11909f534\n\n## Implementation\n\n- [App.tsx](https://github.com/mitulagr2/phraseshift/blob/master/src/screens/App.tsx) renders the application, passing transcript to `TranscriptEditor`\n- [TranscriptEditor](https://github.com/mitulagr2/phraseshift/blob/master/src/components/TranscriptEditor.tsx) - **maintains states** for current script, timer position (in millis), cursor position, playback state, and edit word modal state\n  - updates timer every 16ms (**60 fps**) while playing\n- [PlaybackControls](https://github.com/mitulagr2/phraseshift/blob/master/src/components/PlaybackControls.tsx) - consumes prop timer to handle formatted display of **time and related action** buttons\n  - allows re-playing the script after timer has reached end\n- [TranscriptViewer](https://github.com/mitulagr2/phraseshift/blob/master/src/components/TranscriptViewer.tsx) - consumes prop cursor position to display **sequential highlighting** and line-wise script\n  - allows **seeking timer** to any word by clicking on it\n  - allows launching editing any word by **double-clicking** on it\n- [EditModal](https://github.com/mitulagr2/phraseshift/blob/master/src/components/EditModal.tsx) - consumes prop current word and provides **edit capability**\n  - allows updating only current word or all occurrences of current word\n  - prevents deleting words to ensure the transcript remains intact\n\n## Project structure\n\n```bash\n/src\n├── components\n│   ├── EditModal.tsx               # Edit word UI logic\n│   ├── Footer.tsx                  # Developer credits\n│   ├── Header.tsx                  # Navbar and Brand Title\n│   ├── PlaybackControls.tsx        # Playback UI Logic\n│   ├── Title.tsx                   # Stylized large heading\n│   ├── TranscriptEditor.tsx        # Script State logic and handlers\n│   └── TranscriptViewer.tsx        # Viewer UI logic\n├── index.css                       # Project-wide font styling\n├── index.tsx\n├── screens\n│   └── App.tsx                     # Wrapper for TranscriptEditor, Header, Footer\n└── shared\n│   ├── constants.ts                # Initial script is contained here\n│   └── types.ts                    # WordData interface, CorrectionType enum\n└── __tests__\n    ├── EditModal.test.tsx          # Renders current word and disables action on blank input\n    ├── PlaybackControls.test.tsx   # Renders play and pause buttons appropriately\n    ├── TranscriptEditor.test.tsx   # Renders appropriately on missing or empty transcript\n    └── TranscriptViewer.test.tsx   # Renders transcript and line numbers appropriately\n```\n\n## Tech Stack\n\nThis project was built using Node v22.5 and uses the following technologies:\n\n- [React](https://react.dev/) - Vanilla js with babel and webpack\n- [TypeScript](https://www.typescriptlang.org/) - Language and transpiler\n- [TailwindCSS](https://tailwindcss.com/) - CSS framework\n- [PostCSS](https://postcss.org/) - CSS processor\n- [heroicons](https://heroicons.com/) - SVG library\n- [Jest](https://jestjs.io/) - Testing framework\n- [Bun](https://bun.sh/) - Package management\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitulagr2%2Fphraseshift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmitulagr2%2Fphraseshift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitulagr2%2Fphraseshift/lists"}