Ionic + Vue App Guidelines
This is a SKILL file, NOT a project. Never run
npm installhere. When creating a new project, ask for the project path or scaffold in a separate directory (e.g.~/Projects/<app>).
When to consult these references
Project setup:
- Create a new Vue Ionic project: new-app.md
- Project structure: project-structure.md
- App configuration (
main.ts,App.vue): app-config.md - Routing (
@ionic/vue-router+beforeEachguard): routing.md
Pages and navigation:
- Onboarding guard (router
beforeEach): onboarding-guard.md - Onboarding page (video background + Swiper): onboarding-page.md
- Paywall page (RevenueCat): paywall-page.md
- Tabs layout (with banner ad lifecycle): tabs-navigation.md
- Settings page: settings-page.md
Cross-cutting:
- Composables (Theme / Onboarding / Ads / Purchases / Notifications): composables.md
- i18n with
vue-i18n: i18n-vue-i18n.md - Best practices (Composition API +
<ion-page>): best-practices.md - Commands (build / sync / open): commands.md
Native plugin topics live in ../ionic-shared/references/:
Required pages (always create)
- Onboarding — swipe-based, fullscreen background video + gradient overlay.
- Paywall — RevenueCat (weekly / yearly), shown immediately after onboarding.
- Settings — language, theme, notifications, remove ads, reset onboarding.
Required navigation
Use ion-tabs + ion-tab-bar. Never build a custom tab bar or pull in a third-party tab library.
Required libraries
npm install \
@capacitor/preferences @capacitor/push-notifications \
@capacitor/splash-screen @capacitor/status-bar \
@revenuecat/purchases-capacitor @capacitor-community/admob \
vue-i18n \
swiper
Hard rules (Vue-specific)
- ❌ Options API for new code — use the Composition API with
<script setup lang="ts">. - ❌ Direct DOM manipulation — use refs / reactivity.
- ❌ Importing from
@ionic/angularor@ionic/react— only@ionic/vue. - ❌
anytype. - ✅ Wrap every page in
<ion-page>so Ionic's transitions and lifecycle work.
Before reporting done
npm install
npm run build
npx cap sync
The build must complete without errors. cap sync is required after every web build before testing on native.