Journora is a complete Flutter app template for planning a trip — 22 screens covering the brief, a day-by-day itinerary, a document wallet, a split budget, a packing list, onboarding, auth and settings, in light and dark. It runs on your own API key, and it also runs on no key at all: Demo mode ships switched on and answers from bundled sample itineraries, so every screen works the moment you press run.

Name a city and a number of days, and a full day-by-day itinerary comes back — morning, afternoon and evening, with a theme for each day and a per-person cost on every stop. Then it stops being a plan and becomes the trip: the documents you need at the desk, the money the group owes each other, and the list of things still to pack. There is nothing to deploy and nothing to host: no server, no Firebase, no vendor SDK, and the buyer’s API keys go to the iOS keychain and to encrypted storage on Android.
flutter analyze comes back with zero issuesapp_colors.dart file, with the switch in the app on the You tabget, http, flutter_secure_storage and cupertino_icons. No vendor AI SDK is used anywhere, so no provider package update can break your buildThe brief is four controls and a row of chips: how long, how many of you, how soon, then pace, budget and interests. A day stepper, not a calendar range picker — “how long” is the question a planner actually asks, and “which dates” is the question a booking engine asks. Those answers are turned into one plain-words prompt, sent once, and parsed back into dated days. Pace and budget each get their own row, because those two change a plan more than anything else.
Not a flat list of times. Each day is three labelled stretches — morning, afternoon and evening — and every stop is a folder card with its own type, cost, duration and neighbourhood. A generated plan’s times are suggestions, and grouping them says so honestly instead of dressing a guess up as a schedule. Long-press a card and drag it into a different part of the day.
Passports, insurance, cards and bookings live on the device. Nothing here needs a network, which is exactly when you need a policy number read out to you. Anything inside thirty days counts down, then shouts: it gets a raspberry Renew now chip with the days left and is lifted into its own Needs attention slot at the top of the tab. Sensitive fields stay masked until you ask — a passport number reads as ••• 2270 until the eye reveals it, the copy icon puts it on the clipboard, and a value too short to mask safely stays hidden whole.
Everyone logs what they paid and who it was for, and the screen answers the only question a group actually argues about. Journora nets the balances down to the fewest transfers that clear the trip — $815 spent, $272 each — 2 transfers settle it — and phrases the result as an instruction rather than a balance sheet. No spreadsheet, no arguing at the airport. Spending reads as five categories in one bar, and every slice of it is a logged expense you can tap.
Every call is a plain REST request written by hand — no vendor SDK, so no provider package can break the build. Nothing is proxied through a server of ours.
Model names expire, and this template is built for that: every model id is an editable field in Settings rather than a constant in the source, so when a provider retires one the fix is typed into the app instead of recompiled into it. The app says so in a sentence a user can act on and offers a button straight to the field. Adding a fourth provider is one class and one catalog entry — no screen changes.
Both themes are declared side by side in app_colors.dart and the switch is in the app, on the You tab. The dark side lifts the ochre to amber so it still reads on brown. Re-skinning is an afternoon, not a rewrite: every color is a token in app_colors.dart, every typeface is a family constant in app_text_theme.dart, and every corner radius and margin lives in app_spacing.dart. Swap the photography by dropping files into one folder — a missing image falls back to a drawn glyph instead of crashing the screen.
Twenty of them are on this page. The other two are the paywall’s upgrade sheet and the add-expense sheet, both modal. 12 destinations and 6 sample itineraries ship inside, so nothing on this page is a placeholder — every screenshot here is the app running in Demo mode with no key and no network.
A template a buyer can run on the first try, re-skin from one file, and point at their own API key without opening a single screen file. Views never reach into the mock layer, all three typefaces are bundled so the interface renders identically on a cold first launch and on a plane, and the documentation says where every seam is.
Unzip, run flutter pub get, run flutter run. That is the whole setup — there is no server to start, no database to create, no key to register and no account to sign up for. The first thing you see is a working app in Demo mode, and you add a provider key later only if you want live generation.
The Live Preview runs the real app in your browser, in Demo mode. Generate a plan from the brief, open a day and drag a stop into the evening, reveal a masked passport number in the wallet and settle a group budget — the four screens this template is built around are all clickable before you spend anything.
Flutter SDK 3.29 or newer, Dart 3.7 or newer, and Android Studio or VS Code. Android and iOS. No server, no Firebase, no database.
Future and touches the mock layer in exactly one place, so writing them to disk or to your API is a body swap with no screen changes.Questions about setup, providers or re-skinning get an answer through the item’s comments, normally within one to two business days on weekdays. Item support covers the template itself; it does not cover a provider’s own account, quota or billing.
1.0.0 — Initial release.
0 average based on 0 ratings.
| Last Update | 2026-08-26 |
| Created | 2026-08-26 |
| Sales | 0 |
| Discussion | Comments |
| Software Version | Flutter 3.x |
| Files Included | Dart YAML JavaScript JSON .kotlin .swift |
| Video Preview Resolution |