{"adoption": {"forks": 507, "observed_at": "2026-08-28T04:05:32.750922+00:00", "stars": 1762}, "canonical_url": "https://ross.abutalabs.com/products/viewfinder", "card": {"archived": false, "artifact_type": "application", "description": "Viewfinder client and server code", "domain": ["mobile-development", "backend", "photography", "databases", "developer-tools"], "enriched": true, "function": ["http-server", "search-engine", "image-processing", "database", "mobile-framework"], "health_score": 20, "homepage": null, "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "abandoned", "member_repos": ["viewfinderco/viewfinder"], "name": "viewfinderco/viewfinder", "platform": ["python", "cross-platform"], "pushed_at": "2018-09-17T18:56:31+00:00", "repo": "viewfinderco/viewfinder", "stars": 1762, "tags": ["photo-sharing", "dynamodb", "leveldb", "shut-down-service", "reference-code", "full-text-search", "perceptual-hashing", "ios", "android"], "topics": [], "urls": [], "use_cases": ["study how a startup built a DynamoDB-backed backend in Python", "learn to build a full-text search engine on top of LevelDB for mobile", "see how to detect duplicate photos using perceptual fingerprints", "reference for sharing code between iOS and Android with GYP", "revive or fork a photo-sharing app codebase", "learn database schema and indexing patterns on DynamoDB"], "what_it_is": "The complete client and server source code for Viewfinder, a discontinued photo-sharing service, released after shutdown. It serves as a reference implementation covering a DynamoDB-backed server, iOS/Android apps, and mobile full-text search built on LevelDB.", "when_to_avoid": ["you need a maintained, supported photo-sharing service", "you expect clean, well-tested production code", "you need current iOS/Android toolchain compatibility"], "when_to_choose": ["you want a real-world reference for mobile photo app architecture", "you need examples of DynamoDB schema design, indexing, and versioning", "you're interested in LevelDB-based mobile search or image fingerprinting"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/viewfinder", "repo": "viewfinderco/viewfinder", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.750922+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:27:02.870804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da8b46e445edb6401228afe1bbbe45e129147fbffd0059c960cbf4992e85d3e3", "fetched_at": "2026-08-28T04:05:32.750922+00:00", "kind": "readme", "missing": false, "url": "https://github.com/viewfinderco/viewfinder"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4510, "days_push": 2907, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}