Inspiration

When you help look after someone, the work that slips is never the big stuff. It is the small moments: did she drink water, did anyone actually check in, who is visiting on Sunday. One person in a family quietly becomes the organiser, usually the one who lives closest, and carries all of it in their head. Collos exists to make that invisible work visible, and shareable.

What it does

Collos turns care into a short daily plan. Each person you care for gets a plan of small moments: a morning check-in, a water break, fresh air, an evening note. You confirm or skip each one, and the plan remembers it on device, instantly, across restarts.

The idea the app is built around: skipping is not losing. A skipped moment offers to move itself to tomorrow, and the next day it comes back wearing a "Moved here" chip, so nothing you meant to do falls off the plan. Moments can repeat on their own days (every day, weekdays, weekends), so the plan can be one person's real week. The free plan keeps one shared note a day per person; Collos Pro lifts that limit.

How we built it

One React Native (0.86) + Expo (SDK 57) + TypeScript codebase running native on iOS and Android, and exported to web with react-native-web. Care state is device-local with no account and no server copy; every confirmation survives a restart. Behaviour is covered by 29 tests (node:test) and CI on every push.

RevenueCat integration. react-native-purchases is initialised per platform. The paywall renders live packages from the default offering with real prices and a per-month breakdown, annual preselected. purchasePackage, getCustomerInfo and restorePurchases are all implemented; the collos_pro entitlement is checked on launch and after every purchase, and cancelled and failed purchases are handled separately from success. The purchase you see in the demo video is real: it completes through RevenueCat's Test Store, which records the transaction without charging anyone, and the app labels that store honestly in Settings rather than pretending it is the App Store. When no store key is configured the app degrades to a clearly labelled preview mode, so the public demo never dead-ends.

Challenges we ran into

Two stand out. First, a blank white page in production: a floating transitive dependency (@expo/vector-icons pulling expo-font: "*") dragged in a copy of expo-modules-core without registerWebModule, killing the app before first render. The fix was pinning exact versions and adding an overrides entry. Lesson: wildcard peer ranges are load-bearing in a pinned SDK tree.

Second, the project was upgraded across three SDK majors (51 → 54 → 57) to match what Expo Go carries. Every breakage landed in the same three places (file-system APIs moving behind /legacy, absoluteFillObject removed in RN 0.86, and the expo-font override), and no state-engine code was touched to make any of it pass.

What we learned

That honesty is a feature. Labelling the Test Store as the Test Store, saying plainly that there is no account and no server copy, and letting the reset button describe exactly what it deletes all made the product feel more trustworthy, not less impressive.

What's next

A backend so a care circle can genuinely share between phones, scheduled reminders, and store releases for iOS and Android.

Built by a student for the RevenueCat Shipaton Next Gen Award. The repository is public and MIT licensed.

Built With

Share this project:

Updates

Submission history