{"id":22053347,"url":"https://github.com/bertrandom/vestaboard-school-lunch","last_synced_at":"2026-05-11T05:57:16.986Z","repository":{"id":66843644,"uuid":"536373064","full_name":"bertrandom/vestaboard-school-lunch","owner":"bertrandom","description":null,"archived":false,"fork":false,"pushed_at":"2023-04-10T19:27:48.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-28T21:46:09.906Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/bertrandom.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}},"created_at":"2022-09-14T01:44:25.000Z","updated_at":"2022-09-14T01:44:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"720fd6e0-598b-4974-811a-c22ca9d92d3b","html_url":"https://github.com/bertrandom/vestaboard-school-lunch","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandom%2Fvestaboard-school-lunch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandom%2Fvestaboard-school-lunch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandom%2Fvestaboard-school-lunch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandom%2Fvestaboard-school-lunch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bertrandom","download_url":"https://codeload.github.com/bertrandom/vestaboard-school-lunch/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245127939,"owners_count":20565203,"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":[],"created_at":"2024-11-30T15:16:22.299Z","updated_at":"2026-05-11T05:57:16.947Z","avatar_url":"https://github.com/bertrandom.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vestaboard-school-lunch\n\nEvery day, my daugher is presented with two terrible options for lunch at school. This displays those options on my split-flap display in the morning, to get her excited about them and give her the illusion of choice.\n\nRetrieves the school lunch option choices from [SchoolCafé](https://www.schoolcafe.com/) and pushes today's choice to my split-flap display. Lunch choices are stored in an sqlite DB.\n\n![web vestaboard com_simulator_ddec790d-031b-4226-abfa-1fdedb5902e6](https://user-images.githubusercontent.com/57770/190040398-2ea78476-001a-4173-bc71-9763c7fc3886.png)\n\n## setup\n\nCopy `config/default.json5` to `config/local.json5` and fill in your School Cafe login and Vestaboard API keys.\n\nIf you want to use different environments, you can copy it to `dev.json5` or `prod.json5` and preface any commands with `NODE_ENV=dev ` or `NODE_ENV=prod `.\n\n## usage\n\nRetrieve the weekly lunch menu\n```\ndeno run --allow-env --allow-read=./,.env,config,data --allow-write=data --allow-net=webapis.schoolcafe.com retrieve_lunch_menu.ts\n```\n\nPush it to the Vestaboard\n```\ndeno run --allow-env --allow-read=./,.env,config,data --allow-write=data --allow-net=platform.vestaboard.com push_to_vestaboard.ts\n```\n\nWhile these commands can be run manually, it's expected that they are to be run via a cronjob. `crontab` contains an example.\n\n## debugging\n\nYou can open the sqlite DB by doing this:\n\n```\n\u003e sqlite3 -box data/lunch.db\nsqlite\u003e SELECT * from lunches;\n┌────┬────────────┬──────────────┬────────────────────────────────────────────┬────────────┐\n│ id │ menu_date  │ menu_item_id │           menu_item_description            │ created_at │\n├────┼────────────┼──────────────┼────────────────────────────────────────────┼────────────┤\n│ 1  │ 2022-09-12 │ 124086       │ Mozzarella Breadsticks w/ Marinara Cup     │ 1663113136 │\n│ 2  │ 2022-09-12 │ 124897       │ Chicken Tamale w/ Rice \u0026 Black Beans       │ 1663113136 │\n│ 3  │ 2022-09-13 │ 108237       │ Pasta Spaghetti w/ Meatballs               │ 1663113136 │\n│ 4  │ 2022-09-13 │ 109560       │ Pasta Alfredo                              │ 1663113136 │\n│ 5  │ 2022-09-14 │ 53261        │ Cheeseburger Flame-Broiled Beef            │ 1663113136 │\n│ 6  │ 2022-09-14 │ 53527        │ Breakfast for Lunch: Pancakes with Omelet  │ 1663113136 │\n│ 7  │ 2022-09-15 │ 54463        │ Turkey Pepperoni Pizza                     │ 1663113136 │\n│ 8  │ 2022-09-15 │ 75529        │ Bean \u0026 Cheese Burrito                      │ 1663113136 │\n│ 9  │ 2022-09-16 │ 109662       │ Enchilada Cheese w/ Rice \u0026 Beans           │ 1663113137 │\n│ 10 │ 2022-09-16 │ 102791       │ Orange Chicken Bites w/ Not- So-Fried Rice │ 1663113137 │\n└────┴────────────┴──────────────┴────────────────────────────────────────────┴────────────┘\n```\n\nTimestamps are stored as unix timestamps.\n\n## license\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertrandom%2Fvestaboard-school-lunch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbertrandom%2Fvestaboard-school-lunch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertrandom%2Fvestaboard-school-lunch/lists"}