-
Notifications
You must be signed in to change notification settings - Fork 0
Dev Contributing
Tankstellen is MIT-licensed open source. Contributions of every size are welcome — translations, bug fixes, country APIs, whole features, docs, test coverage.
- Use the app and report issues — an honest bug report with repro steps is worth gold.
-
Translate — we support 23 languages. ARB files live in
lib/l10n/. See Localization. - Fix a typo / small bug — great first PRs.
- Add a new country API — see Adding a Country.
- Build a feature — open an issue first to align, then go.
- Self-host TankSync — deploy the Supabase schema and share your instance with the community.
- Flutter 3.41.5 (pinned — use FVM if you juggle versions)
- Dart 3.11.3 (comes with Flutter)
- Android SDK + JDK 17 — for Android builds
- Git — obviously
On Windows:
export PATH="/c/dev/flutter/bin:$PATH"
export JAVA_HOME="/c/Program Files/Eclipse Adoptium/jdk-17.0.18.8-hotspot"
export ANDROID_HOME="$LOCALAPPDATA/Android/Sdk"git clone https://github.com/fdittgen-png/tankstellen.git
cd tankstellen
flutter pub get
dart run build_runner build --delete-conflicting-outputsflutter run -d emulator-5554 # Android emulatorflutter test # whole suite (~40 s)
flutter test --coverage # with coverage
flutter analyze # must return zero warnings before commitsupabase start # local Supabase stack (Docker required)
supabase db push # apply migrations to local DB
supabase functions deploy # deploy Edge Functions-
Never commit to
master. Always branch off. - Every code change includes tests. No exceptions — the suite is the regression net.
- Every PR is under 400 lines changed (excluding generated files). Split if larger.
-
Zero
flutter analyzewarnings before commit. -
Conventional commits —
feat:,fix:,refactor:,test:,chore:,docs:,ci:. - One concern per PR. Don't bundle a fix and a refactor.
-
Link an issue via
Closes #NNin the PR body.
-
Pick an issue labelled
good first issueif you want a gentle start. - Comment on the issue saying you're taking it (avoids double work).
-
Fork + branch:
feat/YY-short-descriptionwhereYYis the issue number. - Make the change. Write the test first (TDD), then the fix.
-
Run:
flutter analyze && flutter test. - Push + PR with the template filled out.
- Respond to review — usually quick, we're friendly.
Contributions that serve the leitmotiv: pay less at the pump or burn less behind the wheel.
Convenience features (UI polish, accessibility, deep links, payment shortcuts) are fine, but we won't accept:
- Anything that requires Google Play Services or Firebase
- Anything that introduces third-party tracking
- Features that transmit user data without an explicit opt-in
- GPL dependencies
- Breaking changes to the public data model without a migration
- "Gamification" that doesn't help the user save money or fuel
When in doubt, open a Feature Request issue first.
MIT means you can. Typical personal customizations:
- Add your own brand logos to the Android launcher
- Pre-configure your TankSync anon key so family members don't need to paste it
- Pin your preferred profile as default
- Bundle an extra country API specific to where you live
- Swap in a paid routing service you prefer
See Adding a Country for the pattern; it's the same mechanic for any private extension.
If you think your customization would benefit the public, consider PR'ing it upstream.
- Discussions: GitHub Discussions
- Bugs: GitHub Issues
- Privacy questions: see PRIVACY.md
- Security reports: see SECURITY.md for private disclosure
Be kind. Assume good faith. Disagree about code, not people. Full text in CODE_OF_CONDUCT.md.
- GitHub Workflow — Git flow specifics
- Creating Issues — templates + triage
- Testing & TDD — the TDD protocol
- Adding a Country — the most common first-feature PR
👤 User Guide
🛠️ Developer Guide
Architecture
Code patterns
Quality
Deep dives
Reference
Workflow