Replaces the Material 3 screens with the Noo design system: warm neutrals, one violet accent, pill controls, Schibsted Grotesk/ Instrument Sans, Lucide icons, no gradients/shadows. - New lib/widgets/noo/ component kit (core, lists, files, media, nav, overlays) plus lib/theme/design_tokens.dart for the color/type/space/ radius/motion tokens. - Rebuilt the app shell (top/bottom bars, drawer, desktop sidebar and toolbar), every tab (Files/Offline, Photos, Favorites, Recent, Activity, Trash, Shares), Settings, the lock and login screens, the media viewer, search, the details/share sheets, and the share-upload and move/copy destination pickers. - Added a design canvas (linked from DESIGN_SYSTEM.md) covering the screens the spec didn't already describe, with matching Android and iOS chrome; wrote up the approved recipes into DESIGN_SYSTEM.md §4. - Removed now-dead legacy widgets (media_grid_tile, swipeable_item, sync_status_badge, selectable_thumbnail) and updated architecture.md/styling.md/standards.md to describe the new structure and component/testing conventions. - Added widget tests for the noo/ component kit. This is a UI-only rework: no provider/model/service behavior changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Demo server for Play Store screenshots
tool/screenshots.sh takes the Play Store screenshots against a throwaway
Nextcloud that only contains fake data, so nothing real can appear in them.
This folder is that server:
docker-compose.yml- a single Nextcloud container (SQLite, nothing persisted;docker compose down -vwipes it).seed.py- creates the users and fills them with invented content: landscape "photos" drawn with Pillow, tiny generated PDFs, made-up documents, favorites, shares (to a second user and a public link), trash, a filler file for the storage quota, and edits by a second user so the Activity feed has more than one author. It ends by printingAPP_PASSWORD=...- an app password for the demo user, so the app can start logged in without the browser login step.
Running it
Most of the time just run the whole pipeline from the repo root:
bash tool/screenshots.sh
(Git Bash is fine on Windows.) You need Docker, Python 3, Flutter
and an Android SDK (ANDROID_HOME). Pillow and requests are installed
into tool/demo_server/.venv automatically if your Python lacks them. The
script installs the emulator and a system image through sdkmanager on first
use. Options (HEADLESS=1, DEMO_PORT, DEMO_HOST, KEEP_SERVER=1,
ANDROID_SERIAL, ...) are documented at the top of the script.
To poke at the server yourself:
docker compose -f tool/demo_server/docker-compose.yml up -d
python3 tool/demo_server/seed.py # prints APP_PASSWORD=...
# browse http://localhost (Alex / alex-demo-pass, admin / demo-admin-password)
docker compose -f tool/demo_server/docker-compose.yml down -v
python3 tool/demo_server/seed.py --generate-only DIR writes the generated
files to DIR without any server - handy for previewing the fake content.
Before you upload
Look at every image. The known places where real data could still show up: the server address and username (sync header panel, Settings > Accounts), the avatar initial, notification icons in the status bar, and anything left over from a previously used emulator profile (the script always wipes its own).