Skip to content

Vintly — all-in-one personal app (tasks, notes, calendar, chat, streaks, fitness) + auto APK builds - #1

Merged
Soumoditya merged 1 commit into
mainfrom
claude/vintly-app-development-bOqaA
May 29, 2026
Merged

Vintly — all-in-one personal app (tasks, notes, calendar, chat, streaks, fitness) + auto APK builds#1
Soumoditya merged 1 commit into
mainfrom
claude/vintly-app-development-bOqaA

Conversation

@Soumoditya

Copy link
Copy Markdown
Owner

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)

  • Tasks — priorities, points, completion → Duolingo-style daily streak
  • Notes — Google Keep–style, colors, pin, masonry grid
  • Calendar — month view, events, reminder notifications
  • Reminders / alarms — native local notifications (web fallback)
  • Streaks & points engagement system + motivational nudges
  • Fitness — live step counter via device motion sensor, kcal/km, goal ring
  • Profile — avatar, username, bio, stats
  • Theming — 4 themes, accent presets + custom hex color, chat wallpapers

Lights up once Firebase is configured (Phase 2)

  • 🔌 Accounts (email/password) + find users by username
  • 🔌 Chat — realtime 1:1, GIFs (GIPHY), images, files, voice notes

📱 Automatic APK builds

.github/workflows/build-apk.yml builds Vintly.apk on every push and publishes it to the "latest" Release + workflow Artifacts — installable directly from a phone, no computer needed.

Setup notes

  • Firebase: paste keys into src/lib/firebaseConfig.ts (step-by-step in the file). Until then the app runs fully offline.
  • Repo rename (studygen → vintly) is a manual GitHub Settings step (admin-only); GitHub auto-redirects old links.

https://claude.ai/code/session_01Pnv5r8Bhx1At11U3anCqyP


Generated by Claude Code

@Soumoditya
Soumoditya marked this pull request as ready for review May 29, 2026 10:13
@Soumoditya
Soumoditya merged commit 72ddd96 into main May 29, 2026
1 check passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/screens/Calendar.tsx
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 })

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment thread src/lib/store.ts
Comment on lines +256 to +258
setSteps: (count) => {
const day = todayKey()
set((s) => ({ steps: { day, count: s.steps.day === day ? count : count } }))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment thread src/lib/auth.ts
Comment on lines +36 to +40
setProfile({
uid: u.uid,
displayName: u.displayName || 'You',
username: (u.email || '').split('@')[0],
})

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants