| .. | ||
| app | ||
| electron | ||
| i18n | ||
| packages | ||
| public | ||
| .dockerignore | ||
| .nuxtrc | ||
| .prettierignore | ||
| CLAUDE.md | ||
| colada.options.ts | ||
| components.json | ||
| Dockerfile.dev | ||
| eslint.config.mjs | ||
| forge.config.ts | ||
| index.d.ts | ||
| knip.ts | ||
| nuxt.config.ts | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| prettier.config.js | ||
| README.md | ||
| sentry.client.config.ts | ||
| sentry.server.config.ts | ||
| tsconfig.json | ||
| vite.electron.config.ts | ||
| vitest.config.ts | ||
Web
Nuxt 4 + Vue 3 frontend of Oxynote. Ships two ways: a server-rendered web app and an Electron desktop app.
Tools and dependencies:
- Favicon processing: https://realfavicongenerator.net
- Nuxt documentation
- Vue documentation
- VueUse documentation
- Tiptap documentation
- Shadcn-vue documentation
I18N
All text needs to be placed in the i18n/ directory.
We use a separate package for validation and it uses its own internal error messages: https://vee-validate.logaretm.com/v4/guide/i18n/
Setup
Install dependencies and run the prepare step:
pnpm run setup
Environment variables are read from .env — make setup at the repository
root creates it from docker/env/web.example.env.
Development
Start the web development server on http://localhost:3000 (the backend
stack must be running — make dev at the repository root does both):
pnpm run start:dev:web
Run the desktop app against the same dev server:
pnpm run start:dev:desktop
Production
Build the web application:
pnpm run build:web
Package the desktop application (or build installers with make:desktop):
pnpm run package:desktop
QA
pnpm run qa # check-types + check-lint + check-fmt
pnpm run qa-fix # check-types + lint --fix + prettier --write