we broke ah hell
  • Kotlin 73.9%
  • JavaScript 25.2%
  • Python 0.8%
  • Dockerfile 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-21 15:09:31 +02:00
app Release 1.2.4 with recipe picker and scrollable surprise sheet 2026-09-21 15:09:31 +02:00
assets Release Android updater and finish app persistence and meal improvements 2026-09-16 20:19:53 +02:00
backend test: allow either concurrent pantry edit to win 2026-09-17 20:50:04 +00:00
docs Release 1.2.4 with recipe picker and scrollable surprise sheet 2026-09-21 15:09:31 +02:00
gradle Wire KMP UI to the live daemon and drop scaffold mocks. 2026-09-16 01:51:33 +02:00
scripts Release 1.1.2 with ingredient editing and optional pantry 2026-09-18 21:43:47 +02:00
.dockerignore docs: document account sync API and VPS deployment 2026-09-15 22:39:32 +02:00
.env.example Add offline sync, conflict review, personal banners, and resilient AI pantry suggestions 2026-09-17 22:30:16 +02:00
.gitignore Release Android updater and finish app persistence and meal improvements 2026-09-16 20:19:53 +02:00
build.gradle.kts Wire KMP UI to the live daemon and drop scaffold mocks. 2026-09-16 01:51:33 +02:00
docker-compose.yml Add offline sync, conflict review, personal banners, and resilient AI pantry suggestions 2026-09-17 22:30:16 +02:00
Dockerfile docs: document account sync API and VPS deployment 2026-09-15 22:39:32 +02:00
gradle.properties Fix saved sessions, authenticated photos, editing feedback, and theme continuity 2026-09-16 09:37:33 +00:00
gradlew Scaffold basic Android project with Compose and M3E 2026-09-15 22:35:55 +02:00
gradlew.bat Scaffold basic Android project with Compose and M3E 2026-09-15 22:35:55 +02:00
package-lock.json feat: add SQLite sync store and household accounts with profiles 2026-09-15 22:26:09 +02:00
package.json Add offline sync, conflict review, personal banners, and resilient AI pantry suggestions 2026-09-17 22:30:16 +02:00
README.md Release 1.1.2 with ingredient editing and optional pantry 2026-09-18 21:43:47 +02:00
settings.gradle.kts Scaffold basic Android project with Compose and M3E 2026-09-15 22:35:55 +02:00
SUMMARY.md docs: keep session handoff focused on SamePlate 2026-09-18 15:10:30 +02:00

SamePlate

SamePlate helps two people plan meals together.

  • Plan meals on a shared calendar.
  • Keep recipes, ingredients, pantry items, and day notes in one place.
  • Mark a meal as eaten. Shared meals need both votes. Past days count as eaten automatically, with real votes shown separately.
  • Add profile photos, your own profile banner, a shared Stats banner, and your own calendar color.
  • Choose light, dark, or pure black mode, with optional Android wallpaper colors.

Install

Download the signed Android APK from Releases. It works on Android 10 or newer, on ARM64 devices.

Enter your household's server address and sign in. To create an account, ask the person running the server for its setup code. Each household supports two accounts. Your login stays saved when you close the app. Sessions last 30 days.

A short guide appears after your first login. You can open it again from Profile → How to use SamePlate.

Updates

The app checks for releases when opened, at most once every six hours. It also checks while open. You can check any time in Profile → Check for updates.

When a new version is ready, tap the banner at the top. The app explains how to allow updates from SamePlate in Android settings, downloads the APK, and opens Android's install confirmation. Updates keep your account and saved data.

Run your own server

See the Docker setup or the backend guide. The server uses Node.js and SQLite. Keep its data volume when updating it.

Build

You need Java 17 and the Android SDK (API 35). Set sdk.dir in your local local.properties file, then run:

./gradlew :app:assembleDebug

The APK is in app/build/outputs/apk/debug/. For a desktop preview:

./gradlew :app:run

Run the tests with:

./gradlew :app:desktopTest
npm ci
npm test

For signed releases, see Publishing an update.

Offline sync and conflict review are implemented. The app exposes "Review changes" from its sync notice, showing the current server version and attributed alternatives with choose-current/choose-edit actions. Deleted versions and independently added same-day meal drafts are supported; contested calendar days use the conflict tint. Queued requests retain their IDs across retries and restarts. Rejected device changes stay visible for retry or explicit discard. Previously loaded photos remain in the device photo cache. Sync retries while the app is running; background scheduling is not implemented.

Verify the shared sync state and desktop file persistence with:

./gradlew :app:checkOfflineSync

Reminder options under discussion: a meal notification at a chosen daily time, a prompt if tomorrow has no meal planned, and a pantry-expiry summary. Each should be opt-in per device with adjustable timing and quiet hours. Reminder notifications are not implemented yet. Barcode scanning is not required.