{"id":28420784,"url":"https://github.com/grrowl/lootkit-campjs","last_synced_at":"2025-06-27T08:31:54.289Z","repository":{"id":32587066,"uuid":"36170326","full_name":"grrowl/lootkit-campjs","owner":"grrowl","description":"When everything explodes, the only thing left will be virtual dom diffing frameworks. and other stuff.","archived":true,"fork":false,"pushed_at":"2015-05-24T12:39:44.000Z","size":168,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-05T05:30:39.987Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/grrowl.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}},"created_at":"2015-05-24T12:00:10.000Z","updated_at":"2023-12-27T04:26:01.000Z","dependencies_parsed_at":"2022-08-24T20:21:47.593Z","dependency_job_id":null,"html_url":"https://github.com/grrowl/lootkit-campjs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/grrowl/lootkit-campjs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrowl%2Flootkit-campjs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrowl%2Flootkit-campjs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrowl%2Flootkit-campjs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrowl%2Flootkit-campjs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grrowl","download_url":"https://codeload.github.com/grrowl/lootkit-campjs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grrowl%2Flootkit-campjs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262222411,"owners_count":23277423,"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":"2025-06-05T03:49:53.161Z","updated_at":"2025-06-27T08:31:54.281Z","avatar_url":"https://github.com/grrowl.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \"the world exploded and all we have left is yikyak :sweat_smile:\"\n\n## what's good\n\n* [React components as ES6 classes](src/loot/table.jsx). You can do this\n  ~\\*today\\*~ (with babel)\n* [Flux](https://facebook.github.io/flux/) without a library? :anguished:\n  * Components (like [the AppRoute](src/components/approute.jsx) and\n    [ConnectivityTimer](src/components/connectivitytimer.jsx)) emit Actions\n  * Stores (like [LootStore](src/stores/loot.js)) subscribe to Actions,\n    listening for \"create\" events (and potentially \"update\", \"delete\")\n  * Actions are limited to the subset of event names defined in `this.actions[]`\n    (defined on the [parent](src/actions/loot.js)\n    [classes](src/actions/connectivity.js))\n  * No Dispatcher — traditional Flux requires an event bus, but it's (in my\n    opinion) superfluous as you can subscribe to the Action classes themselves.\n  * [Stores and Actions inherit from EventEmitter](src/flux.js).\n    They emit events. It makes sense.\n* The world's [most basic implementation](src/routes.jsx) of react-router.\n\n## what's not\n\n* the \"database\" is really an array on the server that goes away when you restart\n* The front-end sucks. It was gunna be a map that follows you as you walk.\n* it also doesn't sync properly, duplicating records. shortcuts take longer than\n  you'd think, kids!\n  * started plugging in mongodb, until...\n* I started working on a turn-based pong clone instead, and got caught up in\n  conversations about diversity and working groups and nodeboats and just good\n  campjs stuff. sorry (not sorry)\n\n## the rest\n\naim:\n  authenticated, public messaging. annotate \"stuff\". \"zombies here\" that kind of shit\n\nvisual representation:\n  - you're at the center, north is up.\n  - time is slidable (default T-0s)\n  - events are smaller the more in the past they are\n    events are faded when they're in the future (very quickly, looking into the\n    past)\n  - event heatmap shown on time slider\n\npseudonymous, authenticated:\n  - client generates private/public keys on init\n  - everything's signed, public key is passed along with your encrypted mesasge\n  - not at all private, but it's definitely /that guy/\n  - future scope: potential for secret messages. maybe. i'm not a cryptographer\n\n- pseudonymous, client generates a key to sign all messages?\n  -\u003e fuck usernames\n  -\u003e fuck the lot really\n\n- can send any kind of message\n  -\u003e everything encodes into ascii eventually\n\n\n# implementation\n\nMap:\n  some d3 thing, points around the place, idk its not important;\n\nStore:\n  Alt, localStorage\n  { _id: false }\n\nSync:\n\n* Sync straight to MongoDB - lol HTTP api\n\n* GET\n  -\u003e send array of known _ids for filtering (save bandwidth)\n  -\u003e returns array of other JSON objects\n\n* PUT\n  -\u003e send array of all our known objects with `_id: false`\n\n\nMessage structure:\nEncrypted with the user's private key using [Cryptico](https://github.com/jpfox/cryptico)\n\n    {\n      type: 'text'        mime type of the payload\n      pubkey: \u003c\u003e          user's public key, also kind of an identifier\n      payload: \u003c\u003e         the message, encrypted\n      latlng: [lat, lng]  location of the message\n      signature:          unencrypted payload + type + latlng, encrypted (for validation)\n    }\n\n\n# future scope\n\n24.7 the wild\n\n-\u003e record arbitrary events\n-\u003e view them on the wide scale, by time.\n\n# Licence\n\nTriple licenced under WTFPL, beerware, and into the public domain. Do whatever\nyou want with this, I hope it helps and delights you!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrrowl%2Flootkit-campjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrrowl%2Flootkit-campjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrrowl%2Flootkit-campjs/lists"}