Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

916 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AudioSilo Frontend

Use of AI: AudioSilo is developed by me (a human), with assistance from AI, primarily Claude Code, to help me write, clean up, document, and review the code. That doesn't mean the app is generated on autopilot or "vibe coded". Nothing goes out until I've read it, tested it, and decided it belongs. AI is what lets one person keep up this pace, and I think it's important to disclose that.

The AudioSilo player

Website · Player · Docs · Discord · Sponsor

The audiobook player for audiosilo-server - one Expo / React Native codebase shipping to web PWA + iOS + Android.

See CLAUDE.md for architecture, conventions, and the full stack; docs/PLAN.md for the roadmap.

Prerequisites

  • Node 24.16.0 (pinned in .nvmrc; nvm use).

  • That's it - npm install pulls nothing private:

    npm install

    Icons are FontAwesome Pro glyphs vendored as plain SVG in src/components/ui/icon-data.ts, so building the app needs no FontAwesome token. A token is only needed to add/regenerate an icon - see scripts/glyphs/README.md.

Develop

npm run web                     # expo start --web (no native build needed)
npm run ios | npm run android   # needs a dev build (npx expo prebuild first)
npm run gen:tokens              # after editing colour tokens in src/theme/tokens.json

Styling is Uniwind (Tailwind v4): the theme lives in src/global.css, with its colour block generated from src/theme/tokens.json - see the Styling notes in CLAUDE.md.

Testing & CI

Run the same checks CI runs, locally:

npx tsc --noEmit            # typecheck (strict; must stay clean)
npm run lint                # eslint flat config (eslint-config-expo + prettier)
npm run format              # prettier --check . (CI-gated; fails on unformatted files)
npm test                    # colour-token drift + style guards + jest-expo unit tests
npm test -- --coverage      # …with coverage
npx prettier --write .      # auto-fix formatting before committing

Tests use jest-expo (jest 29) + @testing-library/react-native 14, with in-memory mocks for expo-secure-store and AsyncStorage in jest.setup.ts. Initial coverage targets the framework-free logic: the API client, pairing parser, playback queue/timeline math, the offline progress-sync queue, secure-store, and the session store. Add tests next to the code as *.test.ts.

.github/workflows/ci.yml runs typecheck + lint + format (prettier --check, via npm run format) + tests on every pull request and push to main, and gates merges. After changing dependencies, run npm install and commit the updated package-lock.json in sync - CI uses npm ci (frozen lockfile). The web-export image build (web.yml) stays separate.

License

The player is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only), the same licence as audiosilo-server. See LICENSE.

Two exceptions are not covered by the AGPL. The icon glyphs vendored in src/components/ui/icon-data.ts are Font Awesome Pro icons, used under the Font Awesome Pro licence; reusing them outside AudioSilo needs your own Font Awesome Pro licence. The bundled Google Fonts typefaces are under the SIL Open Font License.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages