{"id":20585969,"url":"https://github.com/phocks/photos","last_synced_at":"2026-04-22T04:02:27.936Z","repository":{"id":237451418,"uuid":"702779398","full_name":"phocks/photos","owner":"phocks","description":null,"archived":false,"fork":false,"pushed_at":"2023-10-10T02:10:53.000Z","size":1879,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-06T12:52:34.605Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://photos-phocks.vercel.app","language":"TypeScript","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/phocks.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}},"created_at":"2023-10-10T02:10:47.000Z","updated_at":"2024-02-19T00:15:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"d9f3739f-14ea-4a4d-af0e-95c6476b9800","html_url":"https://github.com/phocks/photos","commit_stats":null,"previous_names":["phocks/photos"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phocks/photos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phocks%2Fphotos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phocks%2Fphotos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phocks%2Fphotos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phocks%2Fphotos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phocks","download_url":"https://codeload.github.com/phocks/photos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phocks%2Fphotos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32120402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T00:31:26.853Z","status":"online","status_checked_at":"2026-04-22T02:00:05.693Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-16T07:09:52.232Z","updated_at":"2026-04-22T04:02:27.931Z","avatar_url":"https://github.com/phocks.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📷 `EXIF` Photo Blog\n\nhttps://github.com/sambecker/exif-photo-blog/assets/169298/4253ea54-558a-4358-8834-89943cfbafb4\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?demo-title=Photo+Blog\u0026demo-description=Store+photos+with+original+camera+data\u0026demo-url=https%3A%2F%2Fphotos.sambecker.com\u0026demo-image=https%3A%2F%2Fphotos.sambecker.com%2Ftemplate-image-tight\u0026project-name=Photo+Blog\u0026repository-name=exif-photo-blog\u0026repository-url=https%3A%2F%2Fgithub.com%2Fsambecker%2Fexif-photo-blog\u0026from=templates\u0026skippable-integrations=1\u0026teamCreateStatus=hidden\u0026stores=%5B%7B%22type%22%3A%22postgres%22%7D%2C%7B%22type%22%3A%22blob%22%7D%5D)\n\nExample App\n-\nhttps://photos.sambecker.com\n\nFeatures\n-\n- Photo upload with EXIF extraction\n- Organize photos by tag and camera model\n- Infinite scroll\n- Built-in auth\n- Light/dark mode\n- Automatic OG image generation\n\n\u003cimg src=\"/readme/og-image-share.png\" alt=\"OG Image Preview\" width=600 /\u003e\n\nInstallation\n-\n### 1. Deploy to Vercel\n\n1. Click Deploy\n2. Add required storage ([Vercel Postgres](https://vercel.com/docs/storage/vercel-postgres) + [Vercel Blob](https://vercel.com/docs/storage/vercel-blob))\n3. Add environment variables\n- `NEXT_PUBLIC_SITE_TITLE` (e.g., My Photos)\n- `NEXT_PUBLIC_SITE_DOMAIN` (e.g., photos.domain.com)\n- `NEXT_PUBLIC_SITE_DESCRIPTION` (optional—mainly used for OG meta)\n\n### 2. Setup Auth\n\n1. [Generate auth secret](https://generate-secret.vercel.app/32)\n2. Add to environment variables:\n- `AUTH_SECRET`\n3. Add admin user to environment variables:\n- `ADMIN_EMAIL`\n- `ADMIN_PASSWORD`\n\n\n### 3. Upload your first photo\n1. Visit `/admin`\n2. Click \"Choose File\"\n3. Title your photo\n4. Click \"Create\"\n\n### 4. Develop locally\n\n1. Clone code\n2. Install dependencies `pnpm i`\n3. Run `vc dev` to utilize Vercel-stored environment variables\n\n### 5. Add Analytics (optional)\n\n1. Open project on Vercel\n2. Click \"Analytics\" tab\n3. Follow \"Enable Web Analytics\" instructions (`@vercel/analytics` is already part of your project)\n\n### 6. Optional configuration\n\n1. Set `NEXT_PUBLIC_HIDE_REPO_LINK = 1` to remove footer link to repo\n2. Set `NEXT_PUBLIC_PRO_MODE = 1` to enable higher quality image storage\n3. Set `NEXT_PUBLIC_PUBLIC_API = 1` to enable a public API available at `/api`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphocks%2Fphotos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphocks%2Fphotos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphocks%2Fphotos/lists"}