{"id":29013116,"url":"https://github.com/kylerisse/go-signs","last_synced_at":"2025-10-16T00:57:55.519Z","repository":{"id":156788534,"uuid":"244574263","full_name":"kylerisse/go-signs","owner":"kylerisse","description":"SoCal Linux Expo (SCaLE) digital signage","archived":false,"fork":false,"pushed_at":"2025-09-10T19:23:05.000Z","size":3828,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-10T23:32:08.986Z","etag":null,"topics":["boltdb","conference","golang","nix-flake","raspberry-pi","react","signage-display","tailwindcss","typescript"],"latest_commit_sha":null,"homepage":"https://www.socallinuxexpo.org","language":"Go","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/kylerisse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"docs/ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-03-03T07:53:13.000Z","updated_at":"2025-09-10T19:22:05.000Z","dependencies_parsed_at":"2025-04-28T06:22:55.169Z","dependency_job_id":"9e9755a1-ddf1-41c0-aff5-4e2ad337b55b","html_url":"https://github.com/kylerisse/go-signs","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/kylerisse/go-signs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kylerisse%2Fgo-signs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kylerisse%2Fgo-signs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kylerisse%2Fgo-signs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kylerisse%2Fgo-signs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kylerisse","download_url":"https://codeload.github.com/kylerisse/go-signs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kylerisse%2Fgo-signs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279134188,"owners_count":26110948,"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-10-15T02:00:07.814Z","response_time":56,"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":["boltdb","conference","golang","nix-flake","raspberry-pi","react","signage-display","tailwindcss","typescript"],"created_at":"2025-06-25T19:08:20.909Z","updated_at":"2025-10-16T00:57:55.479Z","avatar_url":"https://github.com/kylerisse.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-signs\n\n`go-signs` is a modern Go-based service designed to power the digital signage system for the Southern California Linux Expo (SCaLE). It is specifically built to run as a single binary on Raspberry Pi devices distributed throughout the venue. Each Pi serves as a standalone digital sign displaying conference schedules, speaker information, and event logistics.\n\nThis project is the successor to [scale-signs](https://github.com/socallinuxexpo/scale-signs), which has served SCaLE well for many years.\n\n## Demo\n\nA [DEMO](https://demo.go-signs.org) of this application is available online. It leverages the [SCaLE Simulator](./docs/SIMULATOR.md) and supports [time override](#time-override) URL parameters for any scale between 13x and 22x in addition to a simulated \"current\" SCaLE that is always active.\n\n\u003e Please note that `go-signs` is currently meant to be displayed at 1080p only. Responsive design to support 720p -\u003e 4k is planned for a later release.\n\n## Features\n\n- **Real-time Schedule Updates**: Pulls schedule data from the SCaLE Drupal CMS via XML endpoint\n- **Responsive React Frontend**: Clean, auto-scrolling display of schedule information\n- **Sponsor Showcase**: Sponsors are prominently displayed near the conference schedule\n- **Embedded Assets**: Single binary includes all web assets and sponsor images\n- **Clock Override**: Support for time simulation via URL parameters for testing\n- **Automatic Refresh**: Self-updating schedule and continuous display rotation\n- **Modern Technology Stack**: Go 1.24, React 19, Typescript 5.7, TailwindCSS 4.1, and Nix Unstable\n\n\u003e Future features and milestones are located in the [Roadmap](./docs/ROADMAP.md) doc.\n\n## Usage\n\n```sh\nUsage of go-signs:\n  -port string\n        Port to listen on (1-65535) (default \"2017\")\n  -refresh int\n        Schedule refresh interval in minutes (minimum 1) (default 5)\n  -xml string\n        URL to Drupal XML endpoint (must be http or https) (default \"http://www.socallinuxexpo.org/scale/21x/sign.xml\")\n```\n\n### Time Override\n\nDuring development, you will often need to test how the schedule display behaves at different times. Instead of waiting for specific times or changing your system clock, use the time override feature:\n\n1. Open your development instance in a browser\n2. Add URL parameters to simulate a specific time:\n   ```\n   https://demo.go-signs.org/?year=2025\u0026month=3\u0026day=6\u0026hour=13\u0026minute=53\n   ```\n3. The application will use this simulated time instead of the actual system time\n\nThis feature is extremely useful for testing various schedule states like \"in progress,\" \"starting soon,\" and day transitions. Also be sure to take time zone differences into account. SCaLE talks tend to take place at GMT-8 or GMT-7 depending on the date.\n\n- `year`\n- `month`\n- `day`\n- `hour`\n- `minute`\n\n## Contributing\n\nsee [CONTRIBUTING](./CONTRIBUTING.md)\n\n## Project Structure\n\n```\ngo-signs/\n├─ cmd/go-signs/               # Main application entry point\n├─ nix/                        # Nix devShells and Packages\n├─ pkg/                        # Backend packages\n│  ├─ display/                 # Handles embedding React frontend\n│  ├─ schedule/                # Schedule data handling and XML parsing\n|  ├─ simulator/               # scale-simulator specific server\n│  ├─ server/                  # HTTP server and routes\n│  └─ sponsor/                 # Sponsor management and image serving\n├─ react-display/              # React frontend application\n│  ├─ src/\n│  │  ├─ components/           # React UI components\n│  │  │  ├─ Clock/             # Time display component\n│  │  │  ├─ Header/            # Header component with logo, clock and WiFi info\n│  │  │  ├─ ScheduleCarousel/  # Schedule display component\n│  │  │  ├─ Spinner/           # Loading indicator component\n│  │  │  └─ SponsorBanner/     # Sponsor image rotation display\n│  │  ├─ contexts/             # React contexts for state management\n│  │  │  ├─ TimeContext/       # Date/time management with URL override\n│  │  │  ├─ ScheduleContext/   # Schedule data management\n│  │  │  └─ SponsorContext/    # Sponsor image loading and rotation\n│  │  └─ assets/               # Static assets (logo, images)\n└─ .github/workflows/          # GitHub Actions CI configuration\n```\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE.md](LICENSE.md) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkylerisse%2Fgo-signs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkylerisse%2Fgo-signs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkylerisse%2Fgo-signs/lists"}