{"id":40146209,"url":"https://github.com/svkurowski/aktenkoffer","last_synced_at":"2026-01-19T14:37:23.830Z","repository":{"id":38290745,"uuid":"171141068","full_name":"svkurowski/aktenkoffer","owner":"svkurowski","description":"💼 Personal document management made easy.","archived":false,"fork":false,"pushed_at":"2025-10-08T07:07:22.000Z","size":604,"stargazers_count":4,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-08T09:07:48.348Z","etag":null,"topics":["crm","document-management","personal-utility","rails","ruby","self-hosted","webapp"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/svkurowski.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-02-17T15:56:59.000Z","updated_at":"2025-10-08T07:07:23.000Z","dependencies_parsed_at":"2025-02-25T12:28:37.797Z","dependency_job_id":"c6d9beef-2f86-4b3e-b264-494bc34265d2","html_url":"https://github.com/svkurowski/aktenkoffer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/svkurowski/aktenkoffer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svkurowski%2Faktenkoffer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svkurowski%2Faktenkoffer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svkurowski%2Faktenkoffer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svkurowski%2Faktenkoffer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/svkurowski","download_url":"https://codeload.github.com/svkurowski/aktenkoffer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svkurowski%2Faktenkoffer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28571889,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T12:50:50.164Z","status":"ssl_error","status_checked_at":"2026-01-19T12:50:42.704Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["crm","document-management","personal-utility","rails","ruby","self-hosted","webapp"],"created_at":"2026-01-19T14:37:22.989Z","updated_at":"2026-01-19T14:37:23.826Z","avatar_url":"https://github.com/svkurowski.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License](https://img.shields.io/github/license/svkurowski/aktenkoffer)](LICENSE)\n[![Deploy to Heroku](https://img.shields.io/badge/%E2%86%91_Deploy_to-Heroku-7056bf.svg)](https://heroku.com/deploy)\n[![Build status](https://img.shields.io/circleci/build/github/svkurowski/aktenkoffer)](https://app.circleci.com/pipelines/github/svkurowski/aktenkoffer)\n\n# Usage\n\n## Installation\n\nFirst, set up a PostgreSQL database and an AWS S3 bucket + IAM user with writing permissions.\nSee [doc/aws/cloudformation-template.yaml](doc/aws/cloudformation-template.yaml) for a CloudFormation template you can use to create these.\nAlternatively, you should be able to use any other [ActiveStorage](https://edgeguides.rubyonrails.org/active_storage_overview.html) service by changing [config/storage.yml](config/storage.yml), but S3 is the only one supported out of the box at the moment.\n\nYou will also need to install `poppler-utils` system package as it is used to extract PDF text through `pdftotext`.\n\n```sh\n$ bundle install\n$ yarn install\n$ export DATABASE_URL='postgresql://dbuser:dbpw@dbhost/dbname?pool=5'\n$ export RAILS_ENV='production'\n$ export SECRET_KEY_BASE='OoGho8Lee8KeiVayiepu' # replace with a randomly generated key you store securely\n$ export AWS_ACCESS_KEY_ID='AKIAIOSFODNN7EXAMPLE'\n$ export AWS_SECRET_ACCESS_KEY='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'\n$ export AWS_BUCKET='your-bucket-name'\n$ export AWS_DEFAULT_REGION='eu-west-1' # replace with your region's identifier\n$ bin/rails db:schema:load\n$  bin/rails 'user:create[ThisIsTheUserName,ThisIsThePassword]' # choose a strong password, avoid password being stored in terminal history\n$ bin/rails server\n```\n\nNext, you should create a new contact for your home address, and set the environment variable `HOME_CONTACT_ID` to the UUID of the contact record (you can find it on the edit page URL).\nChanging this value requires restarting the server.\nWe use the home address in various places to offer a better user experience.\n\n### Heroku\nThis repository includes some configuration that enables easy installation of Aktenkoffer on Heroku.\nAll functionality works even when running in Heroku's free tier.\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)\n\n## Update\n```sh\n$ bundle install\n$ yarn install\n$ bin/rails db:migrate\n```\n\n# Development\n\n## Quickstart\n\nInstall the dependencies...\n\n```sh\n$ bundle install\n$ yarn install\n```\n\n...and run the server.\n\n```sh\n$ bin/rails server\n```\n\n## Testing\n\nWe use unit, controller and integration tests to avoid regressions:\n\n```sh\n$ bin/rails test\nRunning 13 tests in a single process (parallelization threshold is 50)\nRun options: --seed 28269\n\n# Running:\n\n.............\n\nFinished in 2.059265s, 6.3129 runs/s, 12.1403 assertions/s.\n13 runs, 25 assertions, 0 failures, 0 errors, 0 skips\n```\n\nWe also ensure the app works end-to-end using system tests:\n\n```sh\n$ bin/rails test:system # use HEADLESS=false to disable headless mode\n........\n\nFinished in 7.494301s, 1.0675 runs/s, 1.0675 assertions/s.\n8 runs, 8 assertions, 0 failures, 0 errors, 0 skips\n```\n\n## Linting\n\nThis project uses multiple linters to apply a common code style and catch common mistakes.\n\n### Ruby\n\n`RuboCop` helps us implement our agreed upon coding style. `reek` can help find potential candidates for refactorings. `rails_best_pratices` will help us pay attention to gotchas and quirks of Rails.\n\nTo run the linters, use the following commands:\n\n```sh\n$ bundle exec rubocop . # required to succeed for PRs\n$ bundle exec reek . # optional\n$ bundle exec rails_best_practices . # optional\n```\n\n### JavaScript\n\nWe are using `ESLint` with the `airbnb-base` preset that follows the [Airbnb style guide](https://github.com/airbnb/javascript).\n\nTo run ESLint, use\n\n```sh\n$ yarn lint\n```\n\n### Continous Integration\n\nOnly `RuboCop` and `ESLint` are run on every Pull Request automatically by the CI pipeline. The other should be run periodically by the developers.\n\n## Acknowledgements\n\n+ Favicons by [twemoji](https://twemoji.twitter.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvkurowski%2Faktenkoffer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsvkurowski%2Faktenkoffer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvkurowski%2Faktenkoffer/lists"}