Context
Since COVID, working from home became the norm. But last year my workplace introduced a hybrid mandate: at least 50% office attendance, or risk losing our annual bonus.
We tap our cards to check in at the office — but the system doesn't share that data back to us. So everyone tracks it manually, juggling spreadsheets, calendars, and counts just to work out whether they're on target.
While exploring AI-assisted coding, I built Attendy to solve it.
Challenges
| Challenge | Why it matters |
|---|---|
| No visibility into your own attendance | The office card system tracks check-ins but never shares the data back. Everyone's held to a 50% target with no way to see where they stand. |
| No lightweight tool to fill the gap | Existing tools were heavy enterprise systems or generic calendars — nothing personal, most costly. |
| Real stakes, no safety net | Bonuses are tied to the target. A miscount isn't a small error — it's money lost on data you can't check. |
Goals
| Goal | Target outcome |
|---|---|
| Solve a real problem | Give colleagues a reliable way to track and prove attendance against the mandate |
| Validate the idea | Get real users and confirm the tool is useful beyond just me |
| Prove the build model | Show a designer who codes can ship a real product end-to-end, solo |
| Build in public | Use the project to grow visibility and share what I learned |
Results
| Metric | Result |
|---|---|
| Reach | 30,000+ across internal and LinkedIn |
| Signups | ~600 |
| Monthly active users | ~150 |
| Support | ~20 coffees via Buy Me a Coffee |
The build
MVP
The MVP started from my own need and what I’ve heard from my colleagues, I prompt it in AI very quick and got a draft mvp.

| Initial feature | What it does |
|---|---|
| Attendance breakdown | Office vs. home percentage across the month |
| Target status | Clear signal on whether you're meeting your working target |
| Real-world aware | Excludes annual leave and public holidays |
| Multi-region support | Multiple countries and regional public holidays |
| Fast onboarding | Up and running in under 3 minutes |
Tech stack
As a designer with a CS background, I owned the full build — lo-fi concept to deployed app. The stack favours speed and low maintenance: AI tooling to move fast, boring proven services where reliability matters most.

| Layer | Approach | Tools |
|---|---|---|
| UX / UI | Concept to lo-fi, fast — no over-designing | ChatGPT, Figma |
| Tech foundation | React Native early, for scalability and lower cross-platform maintenance | React Native |
| Style guide integration | Design tokens → components → code; visual rules became reusable patterns | Claude Code |
| Database & API | Schema-first, minimal backend overhead | Supabase, Claude Code |
| Authentication | Kept boring on purpose — reliable verification flows | Supabase Auth, Resend |
| Security & compliance | Baseline security built in early, evolved alongside features | Supabase, Claude Code |
| Version control | GitHub from day one, for traceability and momentum | GitHub |
| Deployment | Low-friction setup | Go Daddy, GitHub |
| Landing page | Fast signal over polish — ship quickly | Figma Make, Claude Code |
| Payment | Simple, hosted checkout for optional support — no custom billing logic | Stripe |
| Analytics | Lightweight product tracking — signups and basic usage, not a full event pipeline | PostHog |
Getting it out
Landing page
A focused landing page prioritising fast signal over polish — clear value proposition, single call to action, built to validate interest quickly rather than to impress. Shipped fast with Figma Make + Claude Code.
Team showcase
I ran a 20-minute showcase for our division-level digital team (~50 people) in person — not just pitching the idea of vibe-coding, but demonstrating a real, shipped outcome. It turned a concept into something tangible the team could see working.
From this showcase, I got
- ~28 signups came from the session, and
- 3 colleagues picked up vibe-coding themselves — subscribing to Claude Code and now sharing their own work with me regularly.
The deck I used in the showcase.
Internal platform
I shared Attendy on an internal social platform (All Company feed with over 50k users).

| Metric | Result |
|---|---|
| Seen by | 25,480 |
| Reactions | 229 |
| Comments | 45 |
| Shares | 2 |
Takeaways
- Right audience, real conversion. These are colleagues who actually track office attendance — the exact problem Attendy solves. Reach here was ~5.5x my total LinkedIn impressions, to a directly relevant crowd.
- Comments showed genuine product interest, not just applause — questions about notifications, goal forecasting, and leave/public-holiday handling. That's qualitative signal from real users, effectively free feedback.
- Internal visibility — a post seen by 25,000+ colleagues also built recognition for me as a designer who ships working products, not just mockups.

I ran a 4-post series documenting the project from launch to cost breakdown,
| Post | Impressions | Reactions | |
|---|---|---|---|
| The launch | 1,242 | 30 | — |
| Getting first users | 667 | 12 | 6 |
| The tool stack | 1,902 | 19 | 4 |
| What it cost | 810 | 9 | 1 |
| Total | 4,621 | 70 | 11 |
Takeaways
- 4,621 impressions, 70 reactions across four posts (~1.5% engagement, above LinkedIn's ~0.4% average).
- Conversion to actual users was low — my LinkedIn audience is peers and industry folk, not Attendy's direct target users. That's expected for this channel.
- The real value was sharing knowledge and building visibility for my recent learnings and insights — positioning myself as a designer who codes and ships.
- Visual-led posts (tool stack, launch) reached the most people — proof-of-work beat opinion.
Data

Across channels, Attendy reached 30,000+ people — the internal feed driving relevant reach, LinkedIn driving visibility.
That converted to ~500 signups (~1.6%) and ~200 monthly active users.
The clearest pattern: warm, direct exposure beat broadcast. The 15-minute showcase converted ~40% of the room (~20 of ~50), while a post seen by 25,000 converted a fraction of a percent. Reach isn't traction.
I used PostHog for lightweight analytics — enough to see signups and usage, not a full pipeline. I also didn't push to optimise conversion; the aim was to prove the build and share the learnings, not grow a funnel. So these numbers are directional.
Iterating on feedback
I iterated the MVP using feedback from two sources: social comments and the in-app feedback feature.
Features added based on that feedback:

Running it
Cost
The entire cost was tooling. Most services are free to start and scale with usage, so running costs stay low until there's real traction.
| Tool | Cost |
|---|---|
| Figma | US$20 / month |
| ChatGPT Plus | US$20 / month |
| Claude Code Max | AU$169.99 / month |
| Supabase | Free to start (< 50k MAU) |
| Resend | Free → US$25 / month (after ~100 verifications/day) |
| GitHub | US$4 / month |
| Domain | AU$5 (year 1) → AU$24.66 (year 2) |
Cost snapshot
| Total | |
|---|---|
| Monthly | ~US$69 / ~AU$275 |
| Yearly | ~US$828 / ~AU$3,300 |
Takeaway
For a few hundred a month, a designer who codes can test a real product end-to-end. Vibe-coding turns craft into cheap leverage.
Buy me a coffee

Attendy is free, and I chose not to monetise it.
A Buy Me a Coffee link offers optional support to help cover running costs — no paywall, no subscription, just a way for people who find it useful to chip in.
Payments run through Stripe's hosted checkout, kept deliberately simple.
Reflection
If I built an app again, a few things I'd do differently
| Area | What I'd do differently |
|---|---|
| Distribution | 1. Go where the pain lives — industry forums, other companies — not just my own network. 2. Push on conversion as its own problem, not just reach. |
| Product-vs-work | Untangle IP and audience early, so monetisation stays an option. |
| Mindset | Be proactive and consistent. Exposure compounds — the more you ship in public, the more comes back. |
| Tooling | A .com/.app domain over .work (a real trust barrier), and Vercel over GitHub for smoother deploys. |
The build was never the hard part. Distribution, positioning, and small trust signals decide whether a good product reaches people.



