diff --git a/.github/workflows/build-apk.yml b/.github/workflows/build-apk.yml new file mode 100644 index 0000000..a4a2b96 --- /dev/null +++ b/.github/workflows/build-apk.yml @@ -0,0 +1,86 @@ +name: Build Android APK + +# Builds a downloadable Vintly APK on every push and on demand. +# The APK is uploaded as a workflow "Artifact" AND attached to a Release +# so you can install it directly from your phone — no computer needed. + +on: + push: + branches: ['**'] + paths-ignore: + - '**.md' + workflow_dispatch: + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Setup Java (JDK 21) + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Install dependencies + run: npm install + + - name: Build web app + run: npm run build + + - name: Add Android platform + run: | + if [ ! -d "android" ]; then + npx cap add android + fi + + - name: Sync Capacitor + run: npx cap sync android + + - name: Build debug APK + run: | + cd android + chmod +x ./gradlew + ./gradlew assembleDebug --no-daemon --stacktrace + + - name: Rename APK + run: | + mkdir -p out + cp android/app/build/outputs/apk/debug/app-debug.apk out/Vintly.apk + + - name: Upload APK artifact + uses: actions/upload-artifact@v4 + with: + name: Vintly-APK + path: out/Vintly.apk + if-no-files-found: error + + - name: Publish to "latest" Release + uses: softprops/action-gh-release@v2 + with: + tag_name: latest + name: Vintly — latest build + body: | + 📱 **Vintly latest build** + + Download `Vintly.apk` below and open it on your Android phone to install. + (You may need to allow "Install unknown apps" for your browser/files app.) + + Built automatically from the latest code. + files: out/Vintly.apk + prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..99221a3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +node_modules +dist +.DS_Store +*.log + +# Capacitor / Android (generated in CI) +android +.gradle +local.properties +*.keystore + +# Env +.env +.env.local diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c772b6 --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +# Vintly + +A premium, all-in-one personal app: **tasks, notes, calendar, reminders/alarms, streaks & points, fitness, and chat** — built as an installable Android app. + +- **Tasks** with priorities, points & a Duolingo-style daily streak +- **Notes** (Google Keep–style) with colors & pinning +- **Calendar** with events + reminder notifications +- **Reminders / alarms** via native notifications +- **Chat** with other users — text, GIFs (GIPHY), images, files & voice notes *(needs Firebase)* +- **Fitness** live step counter using the phone's motion sensor +- **Fully themeable** — themes, custom accent colors, chat wallpapers + +Built with **React + Vite + Tailwind + Capacitor**. Firebase powers accounts, chat & sync. + +--- + +## 📱 Get the app on your phone (no computer needed) + +Every push builds an APK automatically with GitHub Actions: + +1. On your phone, open this repo on GitHub → **Releases** (right side / repo menu). +2. Open the release named **"Vintly — latest build"**. +3. Download **`Vintly.apk`**. +4. Tap the downloaded file to install. If Android warns, allow **"Install unknown apps"** for your browser/Files app, then tap install again. + +> You can also get it from the **Actions** tab → latest "Build Android APK" run → **Artifacts → Vintly-APK**. + +The app works **offline immediately** — tasks, notes, calendar, reminders, streaks & fitness all run locally. + +--- + +## 🔌 Enable accounts + chat (Firebase) + +Chat, accounts, media & push need a free Firebase backend. Open +[`src/lib/firebaseConfig.ts`](src/lib/firebaseConfig.ts) — it has the full +step-by-step (doable from a phone). Paste your config, commit, and the next +APK build will have chat enabled. + +--- + +## 🛠 Develop locally (optional, needs a computer) + +```bash +npm install +npm run dev # web preview +npm run build # production web build +npx cap add android && npx cap sync android # native shell +``` diff --git a/capacitor.config.ts b/capacitor.config.ts new file mode 100644 index 0000000..33c555c --- /dev/null +++ b/capacitor.config.ts @@ -0,0 +1,20 @@ +import type { CapacitorConfig } from '@capacitor/cli' + +const config: CapacitorConfig = { + appId: 'com.vintly.app', + appName: 'Vintly', + webDir: 'dist', + backgroundColor: '#0b0f1a', + plugins: { + LocalNotifications: { + smallIcon: 'ic_stat_icon', + iconColor: '#7c5cff', + }, + SplashScreen: { + launchAutoHide: true, + backgroundColor: '#0b0f1a', + }, + }, +} + +export default config diff --git a/index.html b/index.html index 8a4a2b1..0fa78cf 100644 --- a/index.html +++ b/index.html @@ -1,264 +1,16 @@ -
- - -Paste or upload study material. Client-side processing. Generates MCQs, short answers and explanations. Zero backend required.
-