Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions .github/workflows/build-apk.yml
Original file line number Diff line number Diff line change
@@ -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 }}
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
node_modules
dist
.DS_Store
*.log

# Capacitor / Android (generated in CI)
android
.gradle
local.properties
*.keystore

# Env
.env
.env.local
48 changes: 48 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
```
20 changes: 20 additions & 0 deletions capacitor.config.ts
Original file line number Diff line number Diff line change
@@ -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
Loading
Loading