Vintly — all-in-one personal app (tasks, notes, calendar, chat, streaks, fitness) + auto APK builds - #1
Conversation
…ess app with auto APK builder
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c2793e1551
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const [h, m] = time.split(':').map(Number) | ||
| const dt = new Date(selected) | ||
| dt.setHours(h, m, 0, 0) | ||
| addEvent({ title: title.trim(), date: dt.getTime(), color, remindMinsBefore: remind ? 10 : undefined }) |
There was a problem hiding this comment.
Store the scheduled notification id
When a user adds an event with a reminder and later deletes the event before it fires, the local notification will still be delivered because the id returned by scheduleReminder below is discarded and the saved event has no way to cancel it. Persist the notification id with the event/reminder and have deletion call cancelReminder so removed events do not keep alarming.
Useful? React with 👍 / 👎.
| setSteps: (count) => { | ||
| const day = todayKey() | ||
| set((s) => ({ steps: { day, count: s.steps.day === day ? count : count } })) |
There was a problem hiding this comment.
Reset the step count when the persisted day changes
After midnight, the first sensor/manual update still uses the previous persisted steps.count (for example getState().steps.count + 1 in Fitness), and this setter writes that carried-over value under today's date because both branches return count. This makes the daily step goal and home ring include yesterday's steps until the user clears storage; reset from zero or calculate the delta when s.steps.day !== day.
Useful? React with 👍 / 👎.
| setProfile({ | ||
| uid: u.uid, | ||
| displayName: u.displayName || 'You', | ||
| username: (u.email || '').split('@')[0], | ||
| }) |
There was a problem hiding this comment.
Preserve the chosen username after auth changes
For accounts whose chosen username differs from the email prefix, every auth-state refresh overwrites the local profile username with the email prefix, so Profile shows the wrong handle and new conversations started by this user write the wrong memberNames entry. Fetch the users/{uid} document or use the displayName/registered username instead of deriving the chat handle from u.email.
Useful? React with 👍 / 👎.
Vintly 🚀
Replaces the old StudyGen prototype with Vintly, a premium personal productivity + social app, built as an installable Android app with React + Vite + Tailwind + Capacitor (Firebase for accounts/chat).
What works now (offline, no setup)
Lights up once Firebase is configured (Phase 2)
📱 Automatic APK builds
.github/workflows/build-apk.ymlbuildsVintly.apkon every push and publishes it to the "latest" Release + workflow Artifacts — installable directly from a phone, no computer needed.Setup notes
src/lib/firebaseConfig.ts(step-by-step in the file). Until then the app runs fully offline.https://claude.ai/code/session_01Pnv5r8Bhx1At11U3anCqyP
Generated by Claude Code