Latest commit

History

137 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🚀 Flutter Starter

A highly modular, production-ready Flutter starter framework focusing on Clean Architecture, optional hardening (RASP), robust environment configuration, and extensive developer tooling.

FlutterDartArchitecture


🌟 Key Highlights

  • 🏛️ Clean Architecture: Domain, Data, Presentation layers powered by Riverpod and Freezed.
  • 🛡️ RASP (optional):freerasp is in pubspec.yaml; the app defaults to a no-opraspServiceProvider until you wire a real implementation. See Security implementation.
  • 🌐 Network Protocol: Resilient HTTP Client (dio) with intercepts and a detached WebSocket Real-Time Interface.
  • 🧪 Comprehensive Automation: Unit/widget/integration tests, optional E2E with Patrol (local or manual CI workflow).
  • 🎨 1-Click Branding: Native splash screens and launcher icons scaffolded straight from logo.png.
  • ⚙️ Powerful Configurations: Layered Fallback configurations allowing Local .env, remote-configs, and dart-defines overrides.

Looking for the complete list of features and tech-stack? Check out the Comprehensive Documentation.


Super starter (fork and customize)

Mason brick (optional)

With Mason CLI installed:

dart pub global activate mason_cli
mason get
mason make flutter_starter_setup

Demo (GIF/video)

If you want the README to feel “hands-on”, add a short demo clip showing feature generation.

  • Suggested asset path: docs/assets/mason-generate-feature.gif
  • Suggested flow:
    • mason get
    • mason make feature_clean (or your feature brick)
    • quick peek at generated folders under lib/features/<feature>/

Recording checklist: docs/guides/support/mason-demo-script.md.

After recording, reference it here:

![Mason demo](docs/assets/mason-generate-feature.gif)

See bricks/README.md and bricks/flutter_starter_setup/README.md. If you rename everything by hand and do not need Mason, you can remove bricks/ and mason.yaml. To drop sample tasks and feature_flags without Mason: dart run tool/strip_sample_features.dart --apply.


🚀 Quick Start

1. Installation

Clone the repository and install dependencies:

git clone <repository-url> my_app
cd my_app
flutter pub get

2. Generate Boilerplate Code

Run the build runner to generate Riverpod providers, JSON serialization, and Freezed unions:

flutter pub run build_runner build --delete-conflicting-outputs

3. Native Branding (Optional)

Drop an image to assets/images/logo.png and auto-generate Android and iOS splash screens/icons via:

./scripts/dev/setup_branding.sh

4. Application Configuration

Initialize the local environment settings explicitly:

cp .env.example .env

(Open .env and fill out backend specifics before compiling)

5. Running

flutter run

6. E2E tests (Patrol, optional)

Patrol does not run on every PR by default. Locally: dart pub global activate patrol_cli 3.11.0 then ./scripts/test/run_e2e_tests.sh (or patrol test --target integration_test/app_e2e_test.dart). On GitHub: Actions → E2E Android (Patrol) → Run workflow (Android emulator). Stable selectors use lib/core/constants/ui_keys.dart.


📚 Central Documentation

Rather than cluttering this repository root, we've broken down every system behavior into dedicated guides. Start exploring:


🤝 Contributing & License

We adhere to standard Conventional Commits and GitHooks to ensure clean delivery. Please review the Contributing Guide to learn how to open Pull Requests properly.

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤️ using Flutter

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

137 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🚀 Flutter Starter

A highly modular, production-ready Flutter starter framework focusing on Clean Architecture, optional hardening (RASP), robust environment configuration, and extensive developer tooling.

FlutterDartArchitecture


🌟 Key Highlights

  • 🏛️ Clean Architecture: Domain, Data, Presentation layers powered by Riverpod and Freezed.
  • 🛡️ RASP (optional):freerasp is in pubspec.yaml; the app defaults to a no-opraspServiceProvider until you wire a real implementation. See Security implementation.
  • 🌐 Network Protocol: Resilient HTTP Client (dio) with intercepts and a detached WebSocket Real-Time Interface.
  • 🧪 Comprehensive Automation: Unit/widget/integration tests, optional E2E with Patrol (local or manual CI workflow).
  • 🎨 1-Click Branding: Native splash screens and launcher icons scaffolded straight from logo.png.
  • ⚙️ Powerful Configurations: Layered Fallback configurations allowing Local .env, remote-configs, and dart-defines overrides.

Looking for the complete list of features and tech-stack? Check out the Comprehensive Documentation.


Super starter (fork and customize)

Mason brick (optional)

With Mason CLI installed:

dart pub global activate mason_cli
mason get
mason make flutter_starter_setup

Demo (GIF/video)

If you want the README to feel “hands-on”, add a short demo clip showing feature generation.

  • Suggested asset path: docs/assets/mason-generate-feature.gif
  • Suggested flow:
    • mason get
    • mason make feature_clean (or your feature brick)
    • quick peek at generated folders under lib/features/<feature>/

Recording checklist: docs/guides/support/mason-demo-script.md.

After recording, reference it here:

![Mason demo](docs/assets/mason-generate-feature.gif)

See bricks/README.md and bricks/flutter_starter_setup/README.md. If you rename everything by hand and do not need Mason, you can remove bricks/ and mason.yaml. To drop sample tasks and feature_flags without Mason: dart run tool/strip_sample_features.dart --apply.


🚀 Quick Start

1. Installation

Clone the repository and install dependencies:

git clone <repository-url> my_app
cd my_app
flutter pub get

2. Generate Boilerplate Code

Run the build runner to generate Riverpod providers, JSON serialization, and Freezed unions:

flutter pub run build_runner build --delete-conflicting-outputs

3. Native Branding (Optional)

Drop an image to assets/images/logo.png and auto-generate Android and iOS splash screens/icons via:

./scripts/dev/setup_branding.sh

4. Application Configuration

Initialize the local environment settings explicitly:

cp .env.example .env

(Open .env and fill out backend specifics before compiling)

5. Running

flutter run

6. E2E tests (Patrol, optional)

Patrol does not run on every PR by default. Locally: dart pub global activate patrol_cli 3.11.0 then ./scripts/test/run_e2e_tests.sh (or patrol test --target integration_test/app_e2e_test.dart). On GitHub: Actions → E2E Android (Patrol) → Run workflow (Android emulator). Stable selectors use lib/core/constants/ui_keys.dart.


📚 Central Documentation

Rather than cluttering this repository root, we've broken down every system behavior into dedicated guides. Start exploring:


🤝 Contributing & License

We adhere to standard Conventional Commits and GitHooks to ensure clean delivery. Please review the Contributing Guide to learn how to open Pull Requests properly.

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤️ using Flutter

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

137 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🚀 Flutter Starter

A highly modular, production-ready Flutter starter framework focusing on Clean Architecture, optional hardening (RASP), robust environment configuration, and extensive developer tooling.

FlutterDartArchitecture


🌟 Key Highlights

  • 🏛️ Clean Architecture: Domain, Data, Presentation layers powered by Riverpod and Freezed.
  • 🛡️ RASP (optional):freerasp is in pubspec.yaml; the app defaults to a no-opraspServiceProvider until you wire a real implementation. See Security implementation.
  • 🌐 Network Protocol: Resilient HTTP Client (dio) with intercepts and a detached WebSocket Real-Time Interface.
  • 🧪 Comprehensive Automation: Unit/widget/integration tests, optional E2E with Patrol (local or manual CI workflow).
  • 🎨 1-Click Branding: Native splash screens and launcher icons scaffolded straight from logo.png.
  • ⚙️ Powerful Configurations: Layered Fallback configurations allowing Local .env, remote-configs, and dart-defines overrides.

Looking for the complete list of features and tech-stack? Check out the Comprehensive Documentation.


Super starter (fork and customize)

Mason brick (optional)

With Mason CLI installed:

dart pub global activate mason_cli
mason get
mason make flutter_starter_setup

Demo (GIF/video)

If you want the README to feel “hands-on”, add a short demo clip showing feature generation.

  • Suggested asset path: docs/assets/mason-generate-feature.gif
  • Suggested flow:
    • mason get
    • mason make feature_clean (or your feature brick)
    • quick peek at generated folders under lib/features/<feature>/

Recording checklist: docs/guides/support/mason-demo-script.md.

After recording, reference it here:

![Mason demo](docs/assets/mason-generate-feature.gif)

See bricks/README.md and bricks/flutter_starter_setup/README.md. If you rename everything by hand and do not need Mason, you can remove bricks/ and mason.yaml. To drop sample tasks and feature_flags without Mason: dart run tool/strip_sample_features.dart --apply.


🚀 Quick Start

1. Installation

Clone the repository and install dependencies:

git clone <repository-url> my_app
cd my_app
flutter pub get

2. Generate Boilerplate Code

Run the build runner to generate Riverpod providers, JSON serialization, and Freezed unions:

flutter pub run build_runner build --delete-conflicting-outputs

3. Native Branding (Optional)

Drop an image to assets/images/logo.png and auto-generate Android and iOS splash screens/icons via:

./scripts/dev/setup_branding.sh

4. Application Configuration

Initialize the local environment settings explicitly:

cp .env.example .env

(Open .env and fill out backend specifics before compiling)

5. Running

flutter run

6. E2E tests (Patrol, optional)

Patrol does not run on every PR by default. Locally: dart pub global activate patrol_cli 3.11.0 then ./scripts/test/run_e2e_tests.sh (or patrol test --target integration_test/app_e2e_test.dart). On GitHub: Actions → E2E Android (Patrol) → Run workflow (Android emulator). Stable selectors use lib/core/constants/ui_keys.dart.


📚 Central Documentation

Rather than cluttering this repository root, we've broken down every system behavior into dedicated guides. Start exploring:


🤝 Contributing & License

We adhere to standard Conventional Commits and GitHooks to ensure clean delivery. Please review the Contributing Guide to learn how to open Pull Requests properly.

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤️ using Flutter

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

137 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🚀 Flutter Starter

A highly modular, production-ready Flutter starter framework focusing on Clean Architecture, optional hardening (RASP), robust environment configuration, and extensive developer tooling.

FlutterDartArchitecture


🌟 Key Highlights

  • 🏛️ Clean Architecture: Domain, Data, Presentation layers powered by Riverpod and Freezed.
  • 🛡️ RASP (optional):freerasp is in pubspec.yaml; the app defaults to a no-opraspServiceProvider until you wire a real implementation. See Security implementation.
  • 🌐 Network Protocol: Resilient HTTP Client (dio) with intercepts and a detached WebSocket Real-Time Interface.
  • 🧪 Comprehensive Automation: Unit/widget/integration tests, optional E2E with Patrol (local or manual CI workflow).
  • 🎨 1-Click Branding: Native splash screens and launcher icons scaffolded straight from logo.png.
  • ⚙️ Powerful Configurations: Layered Fallback configurations allowing Local .env, remote-configs, and dart-defines overrides.

Looking for the complete list of features and tech-stack? Check out the Comprehensive Documentation.


Super starter (fork and customize)

Mason brick (optional)

With Mason CLI installed:

dart pub global activate mason_cli
mason get
mason make flutter_starter_setup

Demo (GIF/video)

If you want the README to feel “hands-on”, add a short demo clip showing feature generation.

  • Suggested asset path: docs/assets/mason-generate-feature.gif
  • Suggested flow:
    • mason get
    • mason make feature_clean (or your feature brick)
    • quick peek at generated folders under lib/features/<feature>/

Recording checklist: docs/guides/support/mason-demo-script.md.

After recording, reference it here:

![Mason demo](docs/assets/mason-generate-feature.gif)

See bricks/README.md and bricks/flutter_starter_setup/README.md. If you rename everything by hand and do not need Mason, you can remove bricks/ and mason.yaml. To drop sample tasks and feature_flags without Mason: dart run tool/strip_sample_features.dart --apply.


🚀 Quick Start

1. Installation

Clone the repository and install dependencies:

git clone <repository-url> my_app
cd my_app
flutter pub get

2. Generate Boilerplate Code

Run the build runner to generate Riverpod providers, JSON serialization, and Freezed unions:

flutter pub run build_runner build --delete-conflicting-outputs

3. Native Branding (Optional)

Drop an image to assets/images/logo.png and auto-generate Android and iOS splash screens/icons via:

./scripts/dev/setup_branding.sh

4. Application Configuration

Initialize the local environment settings explicitly:

cp .env.example .env

(Open .env and fill out backend specifics before compiling)

5. Running

flutter run

6. E2E tests (Patrol, optional)

Patrol does not run on every PR by default. Locally: dart pub global activate patrol_cli 3.11.0 then ./scripts/test/run_e2e_tests.sh (or patrol test --target integration_test/app_e2e_test.dart). On GitHub: Actions → E2E Android (Patrol) → Run workflow (Android emulator). Stable selectors use lib/core/constants/ui_keys.dart.


📚 Central Documentation

Rather than cluttering this repository root, we've broken down every system behavior into dedicated guides. Start exploring:


🤝 Contributing & License

We adhere to standard Conventional Commits and GitHooks to ensure clean delivery. Please review the Contributing Guide to learn how to open Pull Requests properly.

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤️ using Flutter

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

137 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🚀 Flutter Starter

A highly modular, production-ready Flutter starter framework focusing on Clean Architecture, optional hardening (RASP), robust environment configuration, and extensive developer tooling.

FlutterDartArchitecture


🌟 Key Highlights

  • 🏛️ Clean Architecture: Domain, Data, Presentation layers powered by Riverpod and Freezed.
  • 🛡️ RASP (optional):freerasp is in pubspec.yaml; the app defaults to a no-opraspServiceProvider until you wire a real implementation. See Security implementation.
  • 🌐 Network Protocol: Resilient HTTP Client (dio) with intercepts and a detached WebSocket Real-Time Interface.
  • 🧪 Comprehensive Automation: Unit/widget/integration tests, optional E2E with Patrol (local or manual CI workflow).
  • 🎨 1-Click Branding: Native splash screens and launcher icons scaffolded straight from logo.png.
  • ⚙️ Powerful Configurations: Layered Fallback configurations allowing Local .env, remote-configs, and dart-defines overrides.

Looking for the complete list of features and tech-stack? Check out the Comprehensive Documentation.


Super starter (fork and customize)

Mason brick (optional)

With Mason CLI installed:

dart pub global activate mason_cli
mason get
mason make flutter_starter_setup

Demo (GIF/video)

If you want the README to feel “hands-on”, add a short demo clip showing feature generation.

  • Suggested asset path: docs/assets/mason-generate-feature.gif
  • Suggested flow:
    • mason get
    • mason make feature_clean (or your feature brick)
    • quick peek at generated folders under lib/features/<feature>/

Recording checklist: docs/guides/support/mason-demo-script.md.

After recording, reference it here:

![Mason demo](docs/assets/mason-generate-feature.gif)

See bricks/README.md and bricks/flutter_starter_setup/README.md. If you rename everything by hand and do not need Mason, you can remove bricks/ and mason.yaml. To drop sample tasks and feature_flags without Mason: dart run tool/strip_sample_features.dart --apply.


🚀 Quick Start

1. Installation

Clone the repository and install dependencies:

git clone <repository-url> my_app
cd my_app
flutter pub get

2. Generate Boilerplate Code

Run the build runner to generate Riverpod providers, JSON serialization, and Freezed unions:

flutter pub run build_runner build --delete-conflicting-outputs

3. Native Branding (Optional)

Drop an image to assets/images/logo.png and auto-generate Android and iOS splash screens/icons via:

./scripts/dev/setup_branding.sh

4. Application Configuration

Initialize the local environment settings explicitly:

cp .env.example .env

(Open .env and fill out backend specifics before compiling)

5. Running

flutter run

6. E2E tests (Patrol, optional)

Patrol does not run on every PR by default. Locally: dart pub global activate patrol_cli 3.11.0 then ./scripts/test/run_e2e_tests.sh (or patrol test --target integration_test/app_e2e_test.dart). On GitHub: Actions → E2E Android (Patrol) → Run workflow (Android emulator). Stable selectors use lib/core/constants/ui_keys.dart.


📚 Central Documentation

Rather than cluttering this repository root, we've broken down every system behavior into dedicated guides. Start exploring:


🤝 Contributing & License

We adhere to standard Conventional Commits and GitHooks to ensure clean delivery. Please review the Contributing Guide to learn how to open Pull Requests properly.

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤️ using Flutter

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

137 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🚀 Flutter Starter

A highly modular, production-ready Flutter starter framework focusing on Clean Architecture, optional hardening (RASP), robust environment configuration, and extensive developer tooling.

FlutterDartArchitecture


🌟 Key Highlights

  • 🏛️ Clean Architecture: Domain, Data, Presentation layers powered by Riverpod and Freezed.
  • 🛡️ RASP (optional):freerasp is in pubspec.yaml; the app defaults to a no-opraspServiceProvider until you wire a real implementation. See Security implementation.
  • 🌐 Network Protocol: Resilient HTTP Client (dio) with intercepts and a detached WebSocket Real-Time Interface.
  • 🧪 Comprehensive Automation: Unit/widget/integration tests, optional E2E with Patrol (local or manual CI workflow).
  • 🎨 1-Click Branding: Native splash screens and launcher icons scaffolded straight from logo.png.
  • ⚙️ Powerful Configurations: Layered Fallback configurations allowing Local .env, remote-configs, and dart-defines overrides.

Looking for the complete list of features and tech-stack? Check out the Comprehensive Documentation.


Super starter (fork and customize)

Mason brick (optional)

With Mason CLI installed:

dart pub global activate mason_cli
mason get
mason make flutter_starter_setup

Demo (GIF/video)

If you want the README to feel “hands-on”, add a short demo clip showing feature generation.

  • Suggested asset path: docs/assets/mason-generate-feature.gif
  • Suggested flow:
    • mason get
    • mason make feature_clean (or your feature brick)
    • quick peek at generated folders under lib/features/<feature>/

Recording checklist: docs/guides/support/mason-demo-script.md.

After recording, reference it here:

![Mason demo](docs/assets/mason-generate-feature.gif)

See bricks/README.md and bricks/flutter_starter_setup/README.md. If you rename everything by hand and do not need Mason, you can remove bricks/ and mason.yaml. To drop sample tasks and feature_flags without Mason: dart run tool/strip_sample_features.dart --apply.


🚀 Quick Start

1. Installation

Clone the repository and install dependencies:

git clone <repository-url> my_app
cd my_app
flutter pub get

2. Generate Boilerplate Code

Run the build runner to generate Riverpod providers, JSON serialization, and Freezed unions:

flutter pub run build_runner build --delete-conflicting-outputs

3. Native Branding (Optional)

Drop an image to assets/images/logo.png and auto-generate Android and iOS splash screens/icons via:

./scripts/dev/setup_branding.sh

4. Application Configuration

Initialize the local environment settings explicitly:

cp .env.example .env

(Open .env and fill out backend specifics before compiling)

5. Running

flutter run

6. E2E tests (Patrol, optional)

Patrol does not run on every PR by default. Locally: dart pub global activate patrol_cli 3.11.0 then ./scripts/test/run_e2e_tests.sh (or patrol test --target integration_test/app_e2e_test.dart). On GitHub: Actions → E2E Android (Patrol) → Run workflow (Android emulator). Stable selectors use lib/core/constants/ui_keys.dart.


📚 Central Documentation

Rather than cluttering this repository root, we've broken down every system behavior into dedicated guides. Start exploring:


🤝 Contributing & License

We adhere to standard Conventional Commits and GitHooks to ensure clean delivery. Please review the Contributing Guide to learn how to open Pull Requests properly.

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤️ using Flutter

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

137 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🚀 Flutter Starter

A highly modular, production-ready Flutter starter framework focusing on Clean Architecture, optional hardening (RASP), robust environment configuration, and extensive developer tooling.

FlutterDartArchitecture


🌟 Key Highlights

  • 🏛️ Clean Architecture: Domain, Data, Presentation layers powered by Riverpod and Freezed.
  • 🛡️ RASP (optional):freerasp is in pubspec.yaml; the app defaults to a no-opraspServiceProvider until you wire a real implementation. See Security implementation.
  • 🌐 Network Protocol: Resilient HTTP Client (dio) with intercepts and a detached WebSocket Real-Time Interface.
  • 🧪 Comprehensive Automation: Unit/widget/integration tests, optional E2E with Patrol (local or manual CI workflow).
  • 🎨 1-Click Branding: Native splash screens and launcher icons scaffolded straight from logo.png.
  • ⚙️ Powerful Configurations: Layered Fallback configurations allowing Local .env, remote-configs, and dart-defines overrides.

Looking for the complete list of features and tech-stack? Check out the Comprehensive Documentation.


Super starter (fork and customize)

Mason brick (optional)

With Mason CLI installed:

dart pub global activate mason_cli
mason get
mason make flutter_starter_setup

Demo (GIF/video)

If you want the README to feel “hands-on”, add a short demo clip showing feature generation.

  • Suggested asset path: docs/assets/mason-generate-feature.gif
  • Suggested flow:
    • mason get
    • mason make feature_clean (or your feature brick)
    • quick peek at generated folders under lib/features/<feature>/

Recording checklist: docs/guides/support/mason-demo-script.md.

After recording, reference it here:

![Mason demo](docs/assets/mason-generate-feature.gif)

See bricks/README.md and bricks/flutter_starter_setup/README.md. If you rename everything by hand and do not need Mason, you can remove bricks/ and mason.yaml. To drop sample tasks and feature_flags without Mason: dart run tool/strip_sample_features.dart --apply.


🚀 Quick Start

1. Installation

Clone the repository and install dependencies:

git clone <repository-url> my_app
cd my_app
flutter pub get

2. Generate Boilerplate Code

Run the build runner to generate Riverpod providers, JSON serialization, and Freezed unions:

flutter pub run build_runner build --delete-conflicting-outputs

3. Native Branding (Optional)

Drop an image to assets/images/logo.png and auto-generate Android and iOS splash screens/icons via:

./scripts/dev/setup_branding.sh

4. Application Configuration

Initialize the local environment settings explicitly:

cp .env.example .env

(Open .env and fill out backend specifics before compiling)

5. Running

flutter run

6. E2E tests (Patrol, optional)

Patrol does not run on every PR by default. Locally: dart pub global activate patrol_cli 3.11.0 then ./scripts/test/run_e2e_tests.sh (or patrol test --target integration_test/app_e2e_test.dart). On GitHub: Actions → E2E Android (Patrol) → Run workflow (Android emulator). Stable selectors use lib/core/constants/ui_keys.dart.


📚 Central Documentation

Rather than cluttering this repository root, we've broken down every system behavior into dedicated guides. Start exploring:


🤝 Contributing & License

We adhere to standard Conventional Commits and GitHooks to ensure clean delivery. Please review the Contributing Guide to learn how to open Pull Requests properly.

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤️ using Flutter

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

137 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🚀 Flutter Starter

A highly modular, production-ready Flutter starter framework focusing on Clean Architecture, optional hardening (RASP), robust environment configuration, and extensive developer tooling.

FlutterDartArchitecture


🌟 Key Highlights

  • 🏛️ Clean Architecture: Domain, Data, Presentation layers powered by Riverpod and Freezed.
  • 🛡️ RASP (optional):freerasp is in pubspec.yaml; the app defaults to a no-opraspServiceProvider until you wire a real implementation. See Security implementation.
  • 🌐 Network Protocol: Resilient HTTP Client (dio) with intercepts and a detached WebSocket Real-Time Interface.
  • 🧪 Comprehensive Automation: Unit/widget/integration tests, optional E2E with Patrol (local or manual CI workflow).
  • 🎨 1-Click Branding: Native splash screens and launcher icons scaffolded straight from logo.png.
  • ⚙️ Powerful Configurations: Layered Fallback configurations allowing Local .env, remote-configs, and dart-defines overrides.

Looking for the complete list of features and tech-stack? Check out the Comprehensive Documentation.


Super starter (fork and customize)

Mason brick (optional)

With Mason CLI installed:

dart pub global activate mason_cli
mason get
mason make flutter_starter_setup

Demo (GIF/video)

If you want the README to feel “hands-on”, add a short demo clip showing feature generation.

  • Suggested asset path: docs/assets/mason-generate-feature.gif
  • Suggested flow:
    • mason get
    • mason make feature_clean (or your feature brick)
    • quick peek at generated folders under lib/features/<feature>/

Recording checklist: docs/guides/support/mason-demo-script.md.

After recording, reference it here:

![Mason demo](docs/assets/mason-generate-feature.gif)

See bricks/README.md and bricks/flutter_starter_setup/README.md. If you rename everything by hand and do not need Mason, you can remove bricks/ and mason.yaml. To drop sample tasks and feature_flags without Mason: dart run tool/strip_sample_features.dart --apply.


🚀 Quick Start

1. Installation

Clone the repository and install dependencies:

git clone <repository-url> my_app
cd my_app
flutter pub get

2. Generate Boilerplate Code

Run the build runner to generate Riverpod providers, JSON serialization, and Freezed unions:

flutter pub run build_runner build --delete-conflicting-outputs

3. Native Branding (Optional)

Drop an image to assets/images/logo.png and auto-generate Android and iOS splash screens/icons via:

./scripts/dev/setup_branding.sh

4. Application Configuration

Initialize the local environment settings explicitly:

cp .env.example .env

(Open .env and fill out backend specifics before compiling)

5. Running

flutter run

6. E2E tests (Patrol, optional)

Patrol does not run on every PR by default. Locally: dart pub global activate patrol_cli 3.11.0 then ./scripts/test/run_e2e_tests.sh (or patrol test --target integration_test/app_e2e_test.dart). On GitHub: Actions → E2E Android (Patrol) → Run workflow (Android emulator). Stable selectors use lib/core/constants/ui_keys.dart.


📚 Central Documentation

Rather than cluttering this repository root, we've broken down every system behavior into dedicated guides. Start exploring:


🤝 Contributing & License

We adhere to standard Conventional Commits and GitHooks to ensure clean delivery. Please review the Contributing Guide to learn how to open Pull Requests properly.

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤️ using Flutter

Releases

Packages

Contributors

Languages