4 Commits

Author SHA1 Message Date
Space-Banane
e2cb853502 Merge branch 'main' of ssh://gitea.reversed.dev:2222/space/luggage-list
All checks were successful
Luggage List Build / vitests (push) Successful in 1m19s
Luggage List Build / build-web (push) Successful in 2m46s
Luggage List Build / build-android (push) Successful in 13m34s
Luggage List Build / release (push) Successful in 50s
2026-04-19 17:20:19 +02:00
Space-Banane
df89066f3b added vitest as a CI/CD job 2026-04-19 17:20:17 +02:00
163f442338 Rewrite README 2026-04-19 11:48:05 +02:00
25fa20fa49 Update README 2026-04-19 11:46:21 +02:00
2 changed files with 111 additions and 22 deletions

View File

@@ -9,6 +9,28 @@ on:
- '.gitea/workflows/**' - '.gitea/workflows/**'
jobs: jobs:
vitests:
runs-on: ubuntu-latest
steps:
- name: 🏗 Setup repo
uses: actions/checkout@v2
- name: 🏗 Setup Node
uses: actions/setup-node@v2
with:
node-version: 22
- name: 🏗 Setup pnpm
uses: pnpm/action-setup@v4
with:
version: latest
- name: 📦 Install dependencies
run: pnpm install
- name: 🧪 Run vitests
run: pnpm test
build-android: build-android:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@@ -103,7 +125,7 @@ jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [build-android, build-web] needs: [build-android, build-web, vitests]
steps: steps:
- name: 🏗 Setup repo - name: 🏗 Setup repo
uses: actions/checkout@v2 uses: actions/checkout@v2

107
README.md
View File

@@ -1,32 +1,99 @@
# Luggage List # Luggage List
Minimal local-first luggage management app built with Expo. [![Expo](https://img.shields.io/badge/Expo-54.0.33-000020?logo=expo&logoColor=white)](https://expo.dev/)
[![React Native](https://img.shields.io/badge/React%20Native-0.81-61dafb?logo=react&logoColor=white)](https://reactnative.dev/)
[![Local-first](https://img.shields.io/badge/Storage-Local--first-22c55e)](#data-and-backup)
[![Backup](https://img.shields.io/badge/Backup-JSON-8b5cf6)](#data-and-backup)
## Current Features (V2) Luggage List is a local-first Expo app for keeping trips, luggage, and check-ups organized without a server, login, or cloud sync.
- No auth, no server, local storage only (AsyncStorage) ## Highlights
- Trips with name, location, calendar date picker, optional image from gallery
- Active trip auto-select on first load, with manual trip switching anytime via global trip picker
- Default trip template (copied into new trip, not linked)
- Luggage items with:
- name, description, category
- status: packed, unpacked, lost, left-behind, lent-to (+ person name)
- placement: suitcase, backpack, with-user, other
- optional image from gallery
- Item create/edit via modal
- Check-up flow as yes/no checklist with live stats (correct/bad/pending):
- “No” opens update modal
- fixes can be check-up-only or optionally synced to trip item list
- Check-up history per selected trip with saved snapshots + stats
## Notes - Trip planning with names, locations, dates, images, and archive support
- Global trip switching with sensible auto-selection on first launch
- Default trip template that gets copied into new trips
- Luggage items with quantity, description, category, status, placement, and optional photos
- Quick status edits plus full item editing in a modal
- Guided check-up flow with live stats and editable mismatches
- Check-up history per trip with saved snapshots
- JSON backup and restore, including file import/export and pasted JSON
- JSON export is removed for now. ## Tech Stack
- Dark-mode-first minimalist UI.
## Run - Expo
- React Native
- AsyncStorage for local persistence
- expo-image-picker, expo-document-picker, expo-file-system, expo-sharing
- Vitest for tests
## Getting Started
```bash ```bash
npm install npm install
npm run start npm run start
``` ```
### Run on a platform
```bash
npm run android
npm run ios
npm run web
```
## Scripts
- `npm run start` , start the Expo dev server
- `npm run android` , open on Android
- `npm run ios` , open on iOS
- `npm run web` , run in the browser
- `npm run test` , run tests once
- `npm run test:watch` , run tests in watch mode
## Data and Backup
All data stays on-device in AsyncStorage.
Backup and restore is done through JSON, either by:
- exporting to a file
- importing a saved file
- pasting JSON directly into the app
## What You Can Track
### Trips
- Trip name
- Location
- Start and end dates
- Optional trip image
- Archive state
### Items
- Name and quantity
- Description and category
- Status: packed, unpacked, lost, left-behind, lent-to
- Placement: suitcase, backpack, with-user, other
- Optional item image
### Check-ups
- Yes / no checklist flow
- Live correct, bad, and pending counters
- Optional sync back into the trip item list
- Saved history per trip
## Notes
- Dark-mode-first UI
- No auth
- No backend
- No cloud sync
## Development
```bash
npm run test
```