{"id":22877122,"url":"https://github.com/michaelheckmann/personal-website","last_synced_at":"2026-05-08T15:39:48.083Z","repository":{"id":265200076,"uuid":"893884648","full_name":"michaelheckmann/personal-website","owner":"michaelheckmann","description":"Simple personal website, built with Astro","archived":false,"fork":false,"pushed_at":"2025-05-28T09:18:02.000Z","size":7248,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-19T21:50:52.358Z","etag":null,"topics":["astro","blog","markdown"],"latest_commit_sha":null,"homepage":"https://heckmann.app","language":"Astro","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/michaelheckmann.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}},"created_at":"2024-11-25T11:30:50.000Z","updated_at":"2025-05-28T09:18:06.000Z","dependencies_parsed_at":"2025-04-15T11:38:04.626Z","dependency_job_id":null,"html_url":"https://github.com/michaelheckmann/personal-website","commit_stats":null,"previous_names":["michaelheckmann/personal-website"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/michaelheckmann/personal-website","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fpersonal-website","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fpersonal-website/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fpersonal-website/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fpersonal-website/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michaelheckmann","download_url":"https://codeload.github.com/michaelheckmann/personal-website/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fpersonal-website/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261434132,"owners_count":23157204,"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":["astro","blog","markdown"],"created_at":"2024-12-13T15:29:55.580Z","updated_at":"2026-05-08T15:39:48.061Z","avatar_url":"https://github.com/michaelheckmann.png","language":"Astro","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Personal Website\n\nSimple personal website, built with the vanilla-ts vite starter. Design is heavily inspired by [paco.me](https://paco.me/).\n\n\u003cimg width=\"1367\" alt=\"image\" src=\"https://github.com/user-attachments/assets/1f446395-3413-4c54-829a-43982f69ecfa\"\u003e\n\n## Gallery Sync\n\nThe gallery export script syncs the `Gallery` folder from the Krea web app and writes the result to [src/assets/gallery.json](src/assets/gallery.json).\n\nThe script keeps the frontend contract unchanged and combines three Krea endpoints:\n\n1. `/api/assets/folders` for the ordered asset IDs in the `Gallery` folder.\n2. `/api/assets` for image URLs and dimensions.\n3. `/api/assets/metadata` for prompts and provider metadata.\n\nIf Krea does not return a title for an asset, the script generates one with `gpt-5-mini` using metadata text only. The prompt is primed with real titles that already exist in the gallery, and generated titles are cached so reruns do not spend tokens again unless the metadata changes.\n\nAuth uses your browser cookie, not a Krea API token.\n\nSet these values in `.env` when you need them:\n\n```sh\nOPENAI_API_KEY=your_openai_key\nKREA_WEB_COOKIE=\"cookie=value; ...\"\n```\n\nThe easiest flow on macOS is:\n\n1. Open `https://www.krea.ai/assets`.\n2. In DevTools, copy any `/api/assets`, `/api/assets/metadata`, or `/api/assets/folders` request as cURL.\n3. Run `bun run gallery`.\n4. If `KREA_WEB_COOKIE` is not already set, the script will try to extract the cookie from your clipboard and offer to save it to `.env`.\n\nYou can also pass auth explicitly:\n\n```sh\nbun run gallery --curl \"$(pbpaste)\"\nKREA_WEB_COOKIE=\"cookie=value; ...\" bun run gallery\n```\n\nUse `--refresh` to ignore the cached Krea page responses and refetch the data needed for the current Gallery folder.\n\n```sh\nbun run gallery --refresh\n```\n\nTo keep a custom gallery order without hand-maintaining a separate config, edit [src/assets/gallery.json](src/assets/gallery.json) directly while previewing the site, then persist that order for future syncs:\n\n```sh\nbun run gallery --persist-order\n```\n\nThat command snapshots the current item order from [src/assets/gallery.json](src/assets/gallery.json) into [src/assets/gallery-order.json](src/assets/gallery-order.json). Future `bun run gallery` executions apply that saved order first and then append any brand new Krea assets after it.\n\nThe script caches raw Krea responses and normalized indexes under `.cache/krea-gallery/`, stores AI titles per workspace in `.cache/krea-gallery/\u003cworkspace\u003e/ai-titles.json`, and keeps the thumbhash cache in `.cache/thumbhash-cache.json` so reruns only generate missing work.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelheckmann%2Fpersonal-website","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaelheckmann%2Fpersonal-website","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelheckmann%2Fpersonal-website/lists"}