{"id":30184368,"url":"https://github.com/cpursley/livefilter-demo","last_synced_at":"2025-08-12T12:07:15.566Z","repository":{"id":304367144,"uuid":"1018274779","full_name":"cpursley/livefilter-demo","owner":"cpursley","description":"LifeFilter Demo","archived":false,"fork":false,"pushed_at":"2025-07-21T16:00:59.000Z","size":367,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-21T18:34:32.047Z","etag":null,"topics":["liveview","phoenix"],"latest_commit_sha":null,"homepage":"https://livefilter.fly.dev","language":"Elixir","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/cpursley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2025-07-11T23:37:05.000Z","updated_at":"2025-07-21T16:01:02.000Z","dependencies_parsed_at":"2025-07-21T18:18:38.944Z","dependency_job_id":null,"html_url":"https://github.com/cpursley/livefilter-demo","commit_stats":null,"previous_names":["cpursley/livefilter-demo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cpursley/livefilter-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpursley%2Flivefilter-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpursley%2Flivefilter-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpursley%2Flivefilter-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpursley%2Flivefilter-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cpursley","download_url":"https://codeload.github.com/cpursley/livefilter-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpursley%2Flivefilter-demo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270057755,"owners_count":24519523,"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-12T02:00:09.011Z","response_time":80,"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":["liveview","phoenix"],"created_at":"2025-08-12T12:07:14.747Z","updated_at":"2025-08-12T12:07:15.552Z","avatar_url":"https://github.com/cpursley.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LiveFilter Demonstration\n\nA Phoenix LiveView application demonstrating [LiveFilter](https://github.com/cpursley/livefilter) - a comprehensive, reusable filtering library for Phoenix LiveView applications, inspired by Notion, Airtable and similar apps with advanced filter builders. It provides for filtering, sorting, and pagination with clean URL state management and a modern UI built on [SaladUI](https://salad-storybook.fly.dev/) and inspired by [shadcn/ui data tables](https://tablecn.com/).\n\n## Overview\n\nThis is a read-only todo app that showcases LiveFilter's capabilities. The LiveFilter library (`lib/live_filter/`) will be extracted as a standalone hex package.\n\n## Features\n\n- Real-time filtering with URL persistence\n- Text search, single/multi-select, date ranges, boolean toggles, numeric inputs\n- Protocol-based extensible field types\n- Type-safe filter state management\n- Daily data refresh via Quantum scheduler\n- UI built with [SaladUI](https://salad-storybook.fly.dev/) components\n\n## Installation\n\n1. **Prerequisites:**\n   - Elixir 1.15 or later\n   - PostgreSQL\n   - Node.js (for assets)\n\n2. **Setup:**\n   ```bash\n   # Clone the repository\n   git clone \u003crepository\u003e\n   cd todo_app\n   \n   # Install dependencies and setup database\n   mix setup\n   ```\n\n3. **Start the server:**\n   ```bash\n   mix phx.server\n   ```\n\n4. **Visit the demo:**\n   Open [localhost:4000/todos](http://localhost:4000/todos)\n\n## LiveFilter Library\n\nThe LiveFilter library (`lib/live_filter/`) is designed to be extracted as a standalone hex package. It provides a complete filtering solution for Phoenix LiveView applications.\n\n### Core Architecture\n\n- **`LiveFilter.Mountable`** - LiveView integration with overridable callbacks\n- **`LiveFilter.Field`** - Protocol for extensible field types\n- **`LiveFilter.FieldRegistry`** - Centralized field configuration\n- **`LiveFilter.UIState`** - Filter state management with URL serialization\n- **`LiveFilter.QueryBuilder`** - Ecto query generation from filters\n- **`LiveFilter.QuickFilters`** - Helper functions for common filter patterns\n\n## Development\n\n```bash\n# Run tests\nmix test\n\n# Run with coverage  \nmix test --cover\n\n# Format code\nmix format\n\n# Interactive console\niex -S mix phx.server\n```\n\n### Database Seeds\n\n```bash\n# Seed the database (also runs automatically on setup)\nmix run priv/repo/seeds.exs\n\n# Reset and reseed the database\nmix ecto.reset\n```\n\nSeeds automatically regenerate daily at 2 AM UTC to keep date filters relevant. The seed data includes todos with various statuses, assignees, due dates, and project categories.\n\n## Contributing\n\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\nPlease make sure to update tests as appropriate.\n\n## License\n\nMIT License - see LICENSE file for details\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcpursley%2Flivefilter-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcpursley%2Flivefilter-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcpursley%2Flivefilter-demo/lists"}