βββ βββ βββββββ βββ ββββββββββ βββ βββ βββ ββββββββ ββββββββββββββ βββ βββ βββ βββββββββ ββββββ ββββββββ βββ βββ ββββββββββββββββ ββββββββ ββββββββββββββββββββ βββββββββββββββββ βββ ββββββββ βββββββ βββ βββββ ββββββββββ βββ
Cross-platform restaurant selector app built with Tauri + Alpine.js.
Hats off to the OG Python version by @zookinheimer π©
See docs/architecture.md for the full migration plan from FastHTML to Alpine.js + Tauri.
lunchjs/
βββ docs/
β βββ architecture.md # Migration plan and architecture docs
βββ src-tauri/
β βββ src/ # Rust backend (Tauri commands)
β β βββ main.rs
β β βββ lib.rs
β β βββ db.rs
β βββ dist/ # Static frontend (Alpine.js)
β β βββ index.html
β β βββ add.html
β β βββ list.html
β β βββ settings.html
β β βββ app.css
β β βββ basecoat.min.css
β β βββ logo.png
β β βββ fonts/
β β βββ js/
β β βββ alpine.min.js
β β βββ app.js
β β βββ basecoat/
β βββ icons/
β βββ tauri.conf.json
β βββ Cargo.toml
βββ lunch_list.csv # Seed data
-
Install Node.js and Rust:
mise install
If you encounter GPG signature verification errors, import the Node.js release key:
gpg --keyserver hkps://keys.openpgp.org --recv-keys 86C8D74642E67846F8E120284DAA80D1E737BC9F
-
Install dependencies:
npm install
-
Install iOS targets (for mobile development):
rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
-
Install ios-deploy (for physical device deployment):
brew install ios-deploy
-
Setup iOS Simulator (for simulator development/testing):
- Simulators are automatically available in Xcode
- Default simulator: iPhone 13 mini (iOS 18.6)
- To add more simulators:
- Open Xcode β Window β Devices and Simulators
- Click + (Plus sign) at bottom left
- Select Device Type and OS Version
- Click Create
- To change the default simulator, edit
IOS_SIM_DEVICEin.env
-
Configure Apple Developer account (for iOS device builds only):
- Not required for simulator builds (
task ios:devortask ios:build:sim) - Required for device builds and App Store distribution
- Open Xcode β Settings β Apple Accounts β Add your Apple ID
- Connect an iOS device or manually add device IDs at developer.apple.com/account
- The Taskfile will automatically initialize the iOS project when needed
- Not required for simulator builds (
# Development (macOS) - uses nightly + parallel frontend (~10% faster)
task dev
# Development (macOS) - stable toolchain fallback
task tauri:dev:stable
# Development (iOS simulator)
task ios
# Development (physical iOS device)
task ios:run:device
# Run tests
task test
# Build (macOS - current architecture)
task build
# Build (macOS - Apple Silicon)
task build:arm64
# Build (macOS - Intel)
task build:x64
# Build (iOS for App Store - requires device/provisioning)
task ios:build
# Build (iOS Simulator - no provisioning required)
task ios:build:sim
# Sync code signing certificates
task certs
# Upload to TestFlight
task ios:testflight
# Upload to App Store
task ios:release
# Development (Android emulator)
task android:dev
# Development (physical Android device - hot-reload)
task android:dev:device
# Build and install on physical Android device (standalone APK)
task android:run:device
# Build (Android APK for sideloading)
task android:build:apk
# Build (Android AAB for Google Play)
task android:build:aab
# Upload to Google Play Store beta track
task android:testflight
# Upload to Google Play Store production
task android:release
# Clean build artifacts
task clean# Development (macOS)
npx tauri dev
# Development (iOS simulator)
cd src-tauri && npx tauri ios dev
# Build (macOS)
npx tauri build
# Build (iOS)
cd src-tauri && npx tauri ios build
# Development (Android emulator)
cd src-tauri && npx tauri android dev
# Build (Android)
cd src-tauri && npx tauri android build- macOS (desktop)
- iOS (mobile)
- Android (mobile)
