{"id":16884774,"url":"https://github.com/bradfitz/scanningcabinet","last_synced_at":"2026-03-09T22:03:01.264Z","repository":{"id":66404507,"uuid":"438280","full_name":"bradfitz/scanningcabinet","owner":"bradfitz","description":"Document Management System (scanner -\u003e appengine blobs)","archived":false,"fork":false,"pushed_at":"2015-05-03T19:55:56.000Z","size":144,"stargazers_count":148,"open_issues_count":0,"forks_count":17,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-02-11T02:13:03.234Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","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/bradfitz.png","metadata":{"files":{"readme":"README.txt","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}},"created_at":"2009-12-15T19:18:56.000Z","updated_at":"2026-01-15T03:48:23.000Z","dependencies_parsed_at":"2023-02-20T16:01:48.232Z","dependency_job_id":null,"html_url":"https://github.com/bradfitz/scanningcabinet","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bradfitz/scanningcabinet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bradfitz%2Fscanningcabinet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bradfitz%2Fscanningcabinet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bradfitz%2Fscanningcabinet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bradfitz%2Fscanningcabinet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bradfitz","download_url":"https://codeload.github.com/bradfitz/scanningcabinet/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bradfitz%2Fscanningcabinet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30314402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T20:05:46.299Z","status":"ssl_error","status_checked_at":"2026-03-09T19:57:04.425Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-10-13T16:30:35.561Z","updated_at":"2026-03-09T22:03:01.249Z","avatar_url":"https://github.com/bradfitz.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"################################################################################\n#\n# NOTICE: unmaintained! As of 2015-05-03 I no longer use this App Engine-based\n# version of Scanning Cabinet.\n#\n# The migration of my App Engine instance from Master/Slave datastore to HRD\n# failed, so I'm accelerating plans to move this project to be Camlistore-based\n# instead. See camlistore.org. This will just be a Camlistore app, using its\n# data model.\n#\n# Old README follows.\n#\n################################################################################\n\n\nThis is scanningcabinet.\n\nIt's my document management system.  Maybe you'll like it too.\n\nProblem statement:\n\n   * I'm a packrat.  Yes, I might need my T-Mobile cellphone bill from\n     March 2001 sometime.  Maybe.  (shutup)\n\n   * My filing cabinets are full.\n\n   * It's cold in San Francisco and I want to burn stuff.\n\n   * I can't find tax or insurance documents when I need to anyway,\n     because folders suck.  I want tags.  e.g. I can tag that one\n     document \"audi, insurance, crash, car, state farm, royal motors\"\n     and be sure I'll find it later.  Which frickin' folder would I\n     put that in anyway?  Folders sucks.  Yay tags.\n\n   * I have a scanner.  My friend's scanner is better.  Borrowed that\n     one.  It has a sheet feeder.\n\n   * App Engine now has a Blob API: http://bit.ly/8K4FxM\n\n   * It should be easy to get documents online.  Must minimize context\n     switching between feeding the scanner and entering metadata.  In fact,\n     they should be *entirely separate* tasks.  If I have to enter metadata\n     while scanning, I'll probably just end up on reddit.\n\n   * All document metadata entry should be done later.  This includes\n     clumping multi-page scans into their logical documents.  I shouldn't\n     have to even enter how many pages a document is when I scan it.\n     I'll be scanning stacks in the auto-document-feeder anyway.\n\n   * Usually I want to just burn/shred documents, but occasionally\n     I'll need the physical document in the future (like for taxes or\n     jury duty), so the metadata must include information about the\n     document's physical location. (e.g. \"Red Folder #1\")  Then when\n     I need it again, I go linear scan Red Folder #1 looking for it.\n     Also, I track the \"due date\" of the document, and show upcoming\n     ones on the main page, so I see pending due taxes get closer and\n     closer.  Frickin' taxes.\n\nAnyway, I wrote some software.  (parts are kinda crap because I always\nforget Python, but whatevs.)\n\nSome instructions:\n\n* tools/scancab is the client program.  You use it to scan \u0026 upload.\n  Read its docs \u0026 comments.  You'll need to modify the email \u0026\n  password later.  But first:\n\n* appengine/ is the AppEngine server component.  Go to\n  http://appspot.com/ to make an AppID (\"bobscans\").  Then get the\n  1.3.0 or higher App Engine SDK, tweak\n  scanningcabinet/appengine/app.yaml file to match your AppID, then\n  appcfg.py update 'appengine' to upload the app to your account.\n\n  -- Now, go to https://\u003cyour_appid\u003e.appspot.com/ and login.  This\n     makes your UserInfo entity in the database.  That's all.\n\n  -- Now, go back to http://appspot.com/, click your App, then click\n     \"Datastore Viewer\" on the left.  Find your UserInfo entity, click\n     it, and modify its \"upload_password\" to some password you'll use\n     for uploading.  Don't use your Google password.  Choose type\n     \"string\".\n\n  -- Now, go put your Google account's email \u0026 that password you just\n     made up into scanningcabinet/tools/scancab\n\n* Now start scanning stuff.\n\n* Occasionally go add metadata at your app URL.\n\nEnjoy!\n\nBrad\nbrad@danga.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbradfitz%2Fscanningcabinet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbradfitz%2Fscanningcabinet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbradfitz%2Fscanningcabinet/lists"}