Oats vue
Use when building or changing oats frontend UI — Vue 3 components, views, composables, routing, Tailwind, or the TipTap notes editor. Encodes this repo's frontend conventions.From its SKILL.md
npx -y skills add ariso-ai/oats --skill oats-vueAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 23 stars23 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
2.5 KB, as published. Nobody here has run it
oats Frontend (Vue 3) Conventions
The frontend is Vue 3 + TypeScript + Vite, styled with Tailwind v4. Entry is
src/main.ts; the single root is src/App.vue (just <RouterView/>).
Layout
src/main.ts— app bootstrap and the router. Every window loads the same bundle and renders a route viacreateWebHashHistory. Add a view by importing it here and adding aroutesentry. The router statically imports every view, so one broken import breaks the whole app graph (blank windows).src/views/— one.vueper screen (SettingsView,LibraryView,MeetingDetailView,RecorderStrip,WaveformView, …). Co-located*.test.tsuse Vitest +@vue/test-utils. Pure helpers also live here as plain.ts+ tests (e.g.waveformBars.ts,meetingShareText.ts).src/composables/— reusable reactive logic (useBackend,useRecorder,useMeetingApi,usePendingUploads,useAutoRecord, …). Prefer extracting logic into a composable with its own*.test.tsover fattening a view.src/tauri.ts— typed wrappers around backendinvokecalls (auth,api,getDesktopConfig, …). Call the backend through helpers here, not rawinvokescattered in components. Seeoats-taurifor the invoke ↔ Rust contract.
Conventions
<script setup lang="ts">+ Composition API everywhere. No Options API, no Vuex — state lives in composables and@tauri-apps/plugin-store.- Tailwind v4 via
@tailwindcss/vite(config-light; utilities in templates). Global CSS insrc/assets/main.css. - Routing is window-driven: the Rust side opens a window pointed at a hash route
(e.g.
/#/settings,/#/library). A new screen = a new route here + a Rust window opener. Seeoats-architecturefor the window topology. - Notes editor uses TipTap (
@tiptap/vue-3, StarterKit, task-list, typography,tiptap-markdown) — seeMeetingNotesEditor.vue/MeetingDetailView.vue. - Icons:
@heroicons/vue.
Testing
npm test runs Vitest (jsdom). Write a co-located *.test.ts for every new view,
component, or composable. Mock @tauri-apps/api invoke calls — don't hit the backend in
unit tests. Frontend tests are independent of the Rust suite.
When the change spans the Rust boundary, also read oats-tauri. For runtime debugging in
the real window, use oats-debugging.