{"id":15008612,"url":"https://github.com/aloisdeniel/bluff","last_synced_at":"2025-10-25T07:46:38.730Z","repository":{"id":45918761,"uuid":"231448204","full_name":"aloisdeniel/bluff","owner":"aloisdeniel","description":"A static website generator in Dart.","archived":false,"fork":false,"pushed_at":"2020-01-29T12:19:50.000Z","size":109,"stargazers_count":94,"open_issues_count":3,"forks_count":10,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-09T16:05:19.847Z","etag":null,"topics":["dart","generator","html","static-site"],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aloisdeniel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-01-02T19:43:13.000Z","updated_at":"2025-04-01T18:08:33.000Z","dependencies_parsed_at":"2022-09-02T06:12:36.109Z","dependency_job_id":null,"html_url":"https://github.com/aloisdeniel/bluff","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aloisdeniel%2Fbluff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aloisdeniel%2Fbluff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aloisdeniel%2Fbluff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aloisdeniel%2Fbluff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aloisdeniel","download_url":"https://codeload.github.com/aloisdeniel/bluff/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248065288,"owners_count":21041871,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","generator","html","static-site"],"created_at":"2024-09-24T19:19:41.854Z","updated_at":"2025-10-25T07:46:33.691Z","avatar_url":"https://github.com/aloisdeniel.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bluff\n\n## Diclaimer : I built this for my own needs, so don't expect it to be complete. It is a weekend hack, use at your own risk!\n\nBluff is a static website generator written in dart that is inspired by Flutter widgets.\n \n \u003e Why ?\n\nI started this project because I was tired of switching to a js environment everytime I need to write a small static website. I wanted the concept to be nearest of Flutter as possible, again, to keep the same way of developing user interfaces and not loosing time relearning paradigms again and again.\n\n\u003e Why not using Flutter for web ?\n\nJust because I wanted a really lightweight website with good SEOs. The migration to Flutter for web should be pretty simple though.\n\n## Usage\n\nA simple usage example:\n\n```dart\nimport 'package:bluff/bluff.dart';\n\nFuture main() async {\n  final app = Application(\n    availableSizes: [\n      MediaSize.small,\n      MediaSize.medium,\n    ],\n    supportedLocales: [\n      Locale('fr', 'FR'),\n      Locale('en', 'US'),\n    ],\n    routes: [\n      homeRoute,\n    ],\n  );\n  ;\n\n  await publish(app);\n}\n\nfinal homeRoute = Route(\n  title: (context) {\n    final locale = Localizations.localeOf(context);\n    if (locale.languageCode == 'fr') return 'Accueil';\n    return 'Home';\n  },\n  relativeUrl: 'index',\n  builder: (context) =\u003e Home(),\n);\n\nclass Home extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final mediaQuery = MediaQuery.of(context);\n    final theme = Theme.of(context);\n    return Column(\n      crossAxisAlignment: CrossAxisAlignment.stretch,\n      children: \u003cWidget\u003e[\n        Flex(\n          direction: mediaQuery.size == MediaSize.small\n              ? Axis.vertical\n              : Axis.horizontal,\n          children: \u003cWidget\u003e[\n            Expanded(\n              child: Container(\n                height: 300,\n                decoration: BoxDecoration(\n                  image: DecorationImage(\n                    image: ImageProvider.asset('images/logo_dart_192px.svg'),\n                  ),\n                ),\n              ),\n            ),\n            Padding(\n              padding: EdgeInsets.all(20),\n              child: Text('Hello world!'),\n            ),\n            Container(\n              width: 200,\n              height: 200,\n              decoration: BoxDecoration(\n                color: const Color(0xFF0000FF),\n                borderRadius: BorderRadius.circular(5),\n                boxShadow: [\n                  BoxShadow(\n                    color: const Color(0xAA0000FF),\n                    blurRadius: 10,\n                    offset: Offset(10, 10),\n                  ),\n                ],\n              ),\n            ),\n            Image.asset(\n              'images/logo_dart_192px.svg',\n              fit: BoxFit.cover,\n            ),\n            Click(\n              newTab: true,\n              url: 'https://www.google.com',\n              builder: (context, state) {\n                return Container(\n                  child: Text(\n                    'Button',\n                    style: theme.text.paragraph.merge(\n                      TextStyle(\n                        color: state == ClickState.hover\n                            ? const Color(0xFFFFFFFF)\n                            : const Color(0xFF0000FF),\n                      ),\n                    ),\n                  ),\n                  padding: EdgeInsets.all(20),\n                  decoration: BoxDecoration(\n                    color: state == ClickState.hover\n                        ? const Color(0xFF0000FF)\n                        : const Color(0x440000FF),\n                    borderRadius: BorderRadius.circular(5),\n                  ),\n                );\n              },\n            )\n          ],\n        )\n      ],\n    );\n  }\n}\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faloisdeniel%2Fbluff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faloisdeniel%2Fbluff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faloisdeniel%2Fbluff/lists"}