{"id":34728617,"url":"https://github.com/jstrieb/cellbound","last_synced_at":"2026-04-26T09:31:35.272Z","repository":{"id":329886269,"uuid":"1116343499","full_name":"jstrieb/cellbound","owner":"jstrieb","description":"Solve logic puzzles within a spreadsheet","archived":false,"fork":false,"pushed_at":"2025-12-22T17:40:36.000Z","size":206,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-12-23T16:49:17.757Z","etag":null,"topics":["game","game-jam","langjam","spreadsheet","svelte","svelte5"],"latest_commit_sha":null,"homepage":"https://jstrieb.itch.io/cellbound","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jstrieb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-14T17:13:54.000Z","updated_at":"2025-12-22T20:12:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jstrieb/cellbound","commit_stats":null,"previous_names":["jstrieb/cellbound"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jstrieb/cellbound","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jstrieb%2Fcellbound","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jstrieb%2Fcellbound/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jstrieb%2Fcellbound/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jstrieb%2Fcellbound/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jstrieb","download_url":"https://codeload.github.com/jstrieb/cellbound/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jstrieb%2Fcellbound/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32292736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T08:29:33.829Z","status":"ssl_error","status_checked_at":"2026-04-26T08:29:18.366Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["game","game-jam","langjam","spreadsheet","svelte","svelte5"],"created_at":"2025-12-25T02:54:38.661Z","updated_at":"2026-04-26T09:31:35.267Z","avatar_url":"https://github.com/jstrieb.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cellbound\n\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://jstrieb.itch.io/cellbound\" target=\"_blank\"\u003e\n\u003cimg src=\"https://github.com/jstrieb/cellbound/blob/master/public/opengraph_transparent.png?raw=true\" /\u003e\n\u003c/a\u003e\n\u003c/div\u003e\n\n\n[**Cellbound** is a fully-functional spreadsheet engine with a logic puzzle game\nbuilt on top.](https://jstrieb.itch.io/cellbound)\n\nSpreadsheet cells support standard mathematical expressions and function calls,\nas well as references to individual cells and ranges of cells. Cell references\nuse R1C1 reference style notation.\n\nCellbound was built for the [Langjam Gamejam in late\n2025](https://itch.io/jam/langjamgamejam/rate/4136854).\n\n\u003e [!WARNING]\n\u003e \n\u003e This is alpha-quality code. It is likely to have bugs. It was built in a week\n\u003e for a game jam.\n\nCellbound was inspired by [Code Grid](https://github.com/jstrieb/code-grid), and\nwas used as an opportunity to experiment with possible architectural and\nsyntactic changes to Code Grid before committing them to the main repository.\nCellbound was built from scratch without referring to the Code Grid codebase,\nbut lessons learned from Code Grid influenced the development of Cellbound.\n\n\n# How it Works\n\n## Code Table of Contents\n\nThe links below are listed in the order the code should be read to understand\nthe application from the highest to lowest level.\n\n- [`Makefile`](Makefile) – build and run the application locally\n- [`index.html`](index.html) and [`src/App.svelte`](src/App.svelte) – entrypoint\n  to the main, high-level application (the index page mounts the App)\n- [`src/Table.svelte`](src/Table.svelte) and\n  [`src/Cell.svelte`](src/Cell.svelte) – interactive spreadsheet UI code\n- [`src/formula.js`](src/formula.js) – formula parsing logic (start at the\n  bottom of the file and go up)\n- [`src/lib/store.js`](src/lib/store.js) – implementation of \"rederivable\"\n  stores that can change their derived dependencies without invalidating their\n  object reference\n  - Every cell's value is a rederivable store that is rederived when its formula\n    changes, and updated whenever any of its dependencies' values changes\n- [`src/levels.js`](src/levels.js) – game level data\n  - **THERE ARE SPOILERS AND LEVEL SOLUTIONS IN THIS FILE**\n- [`src/parsers.js`](src/lib/parsers.js) – parser combinator library used for\n  formula parsing\n- [`src/formula-functions.js`](src/formula-functions.js) – \"standard library\"\n  formula functions available in every spreadsheet\n- [`src/global.css`](src/global.css) and [`public/*`](public/) – global\n  stylesheet, favicons, etc.\n\n## Cool Code Highlights\n\n- Spreadsheet formulas are built on a custom Svelte store that is\n  \"[rederivable](src/lib/store.js).\"\n  It functions like a Svelte derived store, except it can add or remove\n  dependencies it is derived from without changing its object reference.\n- [Formulas are\n  parsed](src/formula.js)\n  using a custom [parser combinator\n  implementation](src/lib/parsers.js).\n\n## Running the Code\n\nThe [`Makefile`](Makefile) contains all of the steps to build, test, and\ndistribute the code. \n\nIf you have [NodeJS](https://nodejs.org/en/download) installed, the following\nwill compile the code and package it into a ZIP file for distribution:\n\n``` bash\nmake\n```\n\nTo run a local version for live testing and debugging, run:\n\n``` bash\nmake dev\n```\n\n\n# AI \u0026 LLM Disclosure\n\nThis code repository is *entirely human-written*. All bugs, errors, and\nomissions are my own. \n\n\n# Project Status \u0026 Contributing\n\nCellbound is **not** under active development. \n\nIt was built for a game jam, and though I may add code here and there, I am not\nexpecting to maintain it long-term.\n\n\n# Acknowledgments\n\nThanks to [Logan Snow](https://github.com/lsnow99) and [Amy\nLiu](https://www.youtube.com/watch?v=icy7BEzsca8) for help with ideation and\nfeedback on early prototypes.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjstrieb%2Fcellbound","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjstrieb%2Fcellbound","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjstrieb%2Fcellbound/lists"}