{"id":18952392,"url":"https://github.com/tailscale/tmemes","last_synced_at":"2025-07-14T04:11:51.554Z","repository":{"id":187786989,"uuid":"623036288","full_name":"tailscale/tmemes","owner":"tailscale","description":"A meme generator for your tailnet!","archived":false,"fork":false,"pushed_at":"2024-11-19T16:12:56.000Z","size":1781,"stargazers_count":43,"open_issues_count":4,"forks_count":1,"subscribers_count":22,"default_branch":"main","last_synced_at":"2025-04-11T16:18:52.961Z","etag":null,"topics":["go","memes","tailscale","tsnet","webapp"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tailscale.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":"2023-04-03T15:05:14.000Z","updated_at":"2025-04-04T04:43:28.000Z","dependencies_parsed_at":"2023-09-05T16:49:06.197Z","dependency_job_id":"4f9c4089-9ae2-4493-9482-37c0ab3bc84d","html_url":"https://github.com/tailscale/tmemes","commit_stats":null,"previous_names":["tailscale/tmemes"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailscale%2Ftmemes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailscale%2Ftmemes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailscale%2Ftmemes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailscale%2Ftmemes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tailscale","download_url":"https://codeload.github.com/tailscale/tmemes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249057512,"owners_count":21205904,"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":["go","memes","tailscale","tsnet","webapp"],"created_at":"2024-11-08T13:33:05.703Z","updated_at":"2025-04-15T10:50:59.123Z","avatar_url":"https://github.com/tailscale.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tmemes: putting the meme in TS\n\nThis bit of fun was brought to you through the amazing power of Tailscale, and\nthe collaborative efforts of\n\n- Maisem Ali: \"I think we need memegen\"\n- M. J. Fromberger: \"why did I not think of that\"\n- Jenny Zhang: \"ok i’m finally in front of a computer, can I go write some css\"\n- Salman Aljammaz: (quietly moves heaven and earth inside a `\u003ccanvas\u003e`)\n- Shayne Sweeney: \"Would I be stepping on toes if I built a Slack bot?\"\n\ntogether with a lovely and inspirational crew of supporters. There's lots more\nfun still to be had, so if you want to jump in, read on! There is also a\nwishlist of TODO items at the bottom.\n\n---\n\n## Synopsis\n\n`tmemes` is a web app built mainly in Go and running on [`tsnet`][tsnet]. This\nis a very terse description of how it all works.\n\n- The server is `tmemes`, a standalone Go binary using `tsnet`. Run\n\n  ```\n  TS_AUTHKEY=$KEY go run ./tmemes\n  ```\n\n  to start the server. Make sure your tailnet ACL allows access to this node,\n  and you should be able to visit `http://tmemes` in the browser.\n\n- The server \"database\" is a directory of files. Use `--data-dir` to set the\n  location; it defaults to `/tmp/tmemes`.\n\n- Terminology:\n\n  - **Template**: A base image that can be decorated with text.\n  - **Macro**: An image macro combining a template and a text overlay.\n  - **Text overlay**: Lines of text with position and typographical info.\n\n  Types are in `types.go`.\n\n- The data directory contains an `index.db` which is a SQLite database (schema\n  in store/schema.sql), plus various other directories of image content:\n\n  - `templates` are the template images.\n  - `macros` are cached macros (re-generated on the fly as needed).\n  - `static` are some static assets used by the macro generator (esp. fonts).\n\n  The `store` package kinda provides a thin wrapper around these data.\n\n- UI elements are generated by Go HTML templates in `tmemes/ui`. These are\n  statically embedded into the server and served by the handlers.\n\n- Static assets needed by the UI are stored in `tmemes/static`. These are\n  served via `/static/` paths in the server mux.\n\n---\n\n## Links\n\n- [API documentation](./docs/api.md)\n- [Task wishlist](https://github.com/tailscale/tmemes/issues/4) (#4)\n\n[tsnet]: https://godoc.org/tailscale.com/tsnet\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftailscale%2Ftmemes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftailscale%2Ftmemes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftailscale%2Ftmemes/lists"}