{"id":15541347,"url":"https://github.com/ivov/infobootleg","last_synced_at":"2026-04-29T16:39:30.156Z","repository":{"id":103105355,"uuid":"224729633","full_name":"ivov/infobootleg","owner":"ivov","description":"Mobile app for playing around with Argentina's legislative information service, built with Dart/Flutter and Firebase.","archived":false,"fork":false,"pushed_at":"2022-02-01T10:28:52.000Z","size":30376,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-02T06:16:20.321Z","etag":null,"topics":["dart","facebook-login","firebase","flutter","google-custom-search-api","google-signin"],"latest_commit_sha":null,"homepage":"","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/ivov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-28T21:05:58.000Z","updated_at":"2023-10-22T06:07:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"4de95d16-b5c1-4876-b4da-b64f35110f48","html_url":"https://github.com/ivov/infobootleg","commit_stats":{"total_commits":71,"total_committers":1,"mean_commits":71.0,"dds":0.0,"last_synced_commit":"90ef6a373d20123884931ff93cd0329b06ce7209"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ivov/infobootleg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivov%2Finfobootleg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivov%2Finfobootleg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivov%2Finfobootleg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivov%2Finfobootleg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivov","download_url":"https://codeload.github.com/ivov/infobootleg/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivov%2Finfobootleg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271102173,"owners_count":24699632,"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","status":"online","status_checked_at":"2025-08-19T02:00:09.176Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","facebook-login","firebase","flutter","google-custom-search-api","google-signin"],"created_at":"2024-10-02T12:16:41.473Z","updated_at":"2026-04-29T16:39:30.107Z","avatar_url":"https://github.com/ivov.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# infobootleg\r\n\r\n![](https://img.shields.io/github/last-commit/ivov/infobootleg) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\nMobile app for playing around with data from InfoLeg, Argentina's legislative information service.\r\n\r\nBuilt with Dart/Flutter and Firebase, for Android.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"demo/dart.png\" width=\"156\"\u003e\r\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\r\n    \u003cimg src=\"demo/flutter.png\" width=\"160\"\u003e\r\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\r\n    \u003cimg src=\"demo/firebase.png\" width=\"125\"\u003e\r\n\u003c/p\u003e\r\n\r\n## Overview\r\n\r\nAndroid app for retrieving laws from Argentina's [official legislative service](http://www.infoleg.gob.ar) and displaying their data in a user-friendly format, with article-by-article navigation, user authentication and support for favoriting articles and commenting.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"demo/overview.gif\"\u003e\r\n\u003cp\u003e\r\n\r\nFeatures:\r\n\r\n- Full text/metadata retrieval from InfoLeg/Firestore\r\n- Sign in via Google, Facebook, e-mail and incognito\r\n- Search using Google Custom Search API\r\n- Auth stream-based redirection flow\r\n- NoSQL CRUD ops for laws and favorites\r\n- HTML scraping and text parsing with RegEx\r\n- State management with `Provider` and callbacks\r\n\r\n## Installation\r\n\r\n1. Clone repo\r\n2. Get dependencies: `flutter pub get`\r\n3. Run: `flutter run`\r\n\r\n## Operation\r\n\r\n### Sign-in flow\r\n\r\nSign in using a Google or Facebook account, e-mail/password or anonymously. In all cases, a user doc is created at Firestore to record the articles favorited by the user.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"demo/sign_in.png\" height=\"500px\"\u003e\r\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\r\n    \u003cimg src=\"demo/sign_in_email.png\" height=\"500px\"\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"demo/sign_in_with_google.png\" height=\"500px\"\u003e\r\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\r\n    \u003cimg src=\"demo/sign_in_with_facebook.png\" height=\"500px\"\u003e\r\n\u003c/p\u003e\r\n\r\nBased on Firestore's auth stream, the app redirects a signed-in user to the home screen and a signed-out user to the sign-in page. Signed-in status is preserved.\r\n\r\n### Law search\r\n\r\nAt the main search screen, the user may search for a law by name or by number (vertical navigation), view their favorited articles (horizontal navigation) or sign out.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"demo/law_search_screen1.gif\"\u003e\r\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\r\n    \u003cimg src=\"demo/law_search_screen2.gif\"\u003e\r\n\u003cp\u003e\r\n\r\n### Law summary\r\n\r\nSearching for a law leads to the law summary screen, with Firestore's metadata for the queried law: official title, publication date, originating entity, summary text, etc.\r\n\r\n**Modification relations** The laws and regulations that the query modifies and the laws and regulations that are modified by the query are accessed by tapping on the bottom icons.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"demo/law_summary_screen.gif\"\u003e\r\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\r\n    \u003cimg src=\"demo/modification_relations_dialog.gif\"\u003e\r\n\u003cp\u003e\r\n\r\n### Law text\r\n\r\nAt the law summary screen, pressing the big green button brings up the law text screen, with InfoLeg's full text of the law parsed into articles, including a table of contents for ease of navigation.\r\n\r\n**Favoriting articles** Long-pressing an article triggers a prompt for saving it as a user's favorite. Long-pressing a favorited article prompts for removal of the favorite.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"demo/law_text_screen.gif\"\u003e\r\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\r\n    \u003cimg src=\"demo/article_favoriting.gif\"\u003e\r\n\u003cp\u003e\r\n\r\n### Favorites list\r\n\r\nBack at the main search screen, the favorites button leads to the favorites list, which displays every article favorited by the user, including any comments added, also with a table of contents.\r\n\r\n**Commenting on favorites** Tapping on the pen icon of a favorite leads to the comment screen, for commenting on the favorite. Save the comment using the keyboard; delete it using the cross icon. Since the favorites list is stream-based, any changes are reflected immediately.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"demo/favorites_list.gif\"\u003e\r\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\r\n    \u003cimg src=\"demo/commenting_favorites.gif\"\u003e\r\n\u003cp\u003e\r\n\r\n### RegEx exceptions\r\n\r\nGiven InfoLeg's inconsistent formatting, it is expected that RegEx parsing may fail with a number of laws, in which case the native mobile browser is launched.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"demo/formatting_exception1.png\" height=\"500px\"\u003e\r\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\r\n    \u003cimg src=\"demo/formatting_exception2.png\" height=\"500px\"\u003e\r\n\u003c/p\u003e\r\n\r\n## TODOs\r\n\r\n- Add tests!\r\n- More exception handling.\r\n- More RegEx patterns.\r\n- Maybe favoriting entire laws.\r\n\r\n## Author\r\n\r\n© 2020 Iván Ovejero\r\n\r\n## License\r\n\r\nDistributed under the MIT License. See [LICENSE.md](LICENSE.md)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivov%2Finfobootleg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivov%2Finfobootleg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivov%2Finfobootleg/lists"}