882ac14309
gates / gates (push) Successful in 2s
Bookmarks/articles/notes with a crawler (karakeep-chrome) and search (meilisearch v1.41.0). AI off unless the household enters a key; setup gate + sign-up closed twice; Chrome healthcheck over bash /dev/tcp; smtp_mapping (plaintext), mail-off boot measured; web memory 768M -> 1536M on measurements (bench watch, box crawl burst). onboarding/karakeep.md complete. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
136 lines
6.9 KiB
YAML
136 lines
6.9 KiB
YAML
# =============================================================================
|
|
# .felhom.yml - App metadata for felhom-controller
|
|
# =============================================================================
|
|
# Karakeep (formerly Hoarder) — ghcr.io/karakeep-app/karakeep. Onboarding record: onboarding/karakeep.md.
|
|
# First admin: CLASS 4 — the first account that signs up becomes the admin. So: the setup gate (decision 46) keeps a
|
|
# fresh install closed to everyone but the household until it says „Kész, beállítottam"; then the box closes sign-up
|
|
# twice (decision 47): the app's own switch (after_setup → DISABLE_SIGNUPS, which would refuse the FIRST account too, so
|
|
# never at install) and a block of the sign-up routes.
|
|
|
|
# --- Display info (shown on dashboard) ---
|
|
display_name: "Karakeep"
|
|
description: "Könyvjelzők, cikkek, jegyzetek és képek egy helyen, kereshetően"
|
|
category: "productivity"
|
|
subdomain: "bookmarks"
|
|
slug: "karakeep"
|
|
# catalog_since: the date THIS repo last changed this app's pinned images. Any commit that
|
|
# changes an image: line must set this to the same day (see CLAUDE.md).
|
|
catalog_since: "2026-10-01"
|
|
|
|
# --- Resource hints (displayed on deploy screen) ---
|
|
resources:
|
|
mem_request: "700M"
|
|
mem_limit: "2816M" # karakeep 1536M + karakeep-chrome 768M + karakeep-meilisearch 512M = 2816M
|
|
pi_compatible: false
|
|
needs_hdd: false
|
|
|
|
# --- Deploy wizard fields ---
|
|
deploy_fields:
|
|
- env_var: DOMAIN
|
|
label: "Domain"
|
|
type: domain
|
|
description: "A szerver domain neve"
|
|
locked_after_deploy: true
|
|
|
|
- env_var: SUBDOMAIN
|
|
label: "Aldomain"
|
|
type: subdomain
|
|
default: "bookmarks"
|
|
required: true
|
|
locked_after_deploy: true
|
|
description: "Az alkalmazás aldomainje"
|
|
|
|
- env_var: NEXTAUTH_SECRET
|
|
label: "Munkamenet-kulcs"
|
|
type: secret
|
|
generate: "hex:32"
|
|
locked_after_deploy: true
|
|
|
|
- env_var: MEILI_MASTER_KEY
|
|
label: "Keresőindex-kulcs"
|
|
type: secret
|
|
generate: "hex:32"
|
|
locked_after_deploy: true
|
|
|
|
- env_var: OPENAI_API_KEY
|
|
label: "OpenAI API-kulcs (nem kötelező)"
|
|
type: secret_input
|
|
required: false
|
|
description: "Üresen hagyva az automatikus AI-címkézés ki van kapcsolva, és semmi nem megy ki a szerveredről. Ha megadod, minden új könyvjelző szövege az OpenAI-hoz kerül címkézésre."
|
|
|
|
setup_gate: true
|
|
signup_block: "PathRegexp(`(?i)^/+(signup|api/trpc/[^?]*users\\.create)`)"
|
|
after_setup:
|
|
env:
|
|
SIGNUP_CLOSED: "true"
|
|
|
|
# --- App-email (password reset) through the box's mail relay; plaintext :2526 (see the compose comment) ---
|
|
smtp_mapping:
|
|
tls_mode: plaintext
|
|
host_var: SMTP_HOST
|
|
port_var: SMTP_PORT
|
|
from_var: SMTP_FROM
|
|
from_local: karakeep
|
|
|
|
# --- Customer-facing info ---
|
|
app_info:
|
|
tagline: "Könyvjelzők, cikkek és jegyzetek mentése - kereshető saját archívum"
|
|
add_people: "A családtagodat te hozod létre: Beállítások, Admin, Felhasználók, Új felhasználó."
|
|
docs_url: "https://docs.karakeep.app/"
|
|
use_cases:
|
|
- 'Weboldalak mentése: a Karakeep letölti és elteszi a tartalmukat, akkor is, ha az oldal később eltűnik'
|
|
- 'Jegyzetek, képek és PDF-ek egy helyen, teljes szöveges kereséssel'
|
|
- 'Böngészőbővítmény és telefonos alkalmazás a gyors mentéshez'
|
|
- 'AI-címkézés csak akkor, ha te megadsz hozzá egy OpenAI-kulcsot - alapból ki van kapcsolva'
|
|
first_steps:
|
|
- 'Nyisd meg a bookmarks.DOMAIN címet, és hozd létre a fiókodat (az első fiók lesz az admin)'
|
|
- 'Kattints a „Kész, beállítottam" gombra az alkalmazás oldalán - ezután más már nem regisztrálhat'
|
|
- 'Telepítsd a böngészőbővítményt vagy a telefonos alkalmazást, és add meg: https://bookmarks.DOMAIN és egy API-kulcsot (Beállítások, API-kulcsok)'
|
|
- 'Mentsd el az első könyvjelződet'
|
|
|
|
# --- Controller health probe (dials what the compose healthcheck dials) ---
|
|
healthcheck:
|
|
checks:
|
|
- type: api
|
|
port: 3000
|
|
path: "/api/health"
|
|
expect:
|
|
status: 200
|
|
|
|
i18n:
|
|
en:
|
|
description: 'Bookmarks, articles, notes and images in one place, searchable'
|
|
app_info:
|
|
tagline: 'Save bookmarks, articles and notes - your own searchable archive'
|
|
add_people: "You create your family member's account: Settings, Admin, Users, New user."
|
|
use_cases:
|
|
- 'Save web pages: Karakeep downloads and keeps their content, even if the page disappears later'
|
|
- 'Notes, images and PDFs in one place, with full-text search'
|
|
- 'A browser extension and a phone app for quick saving'
|
|
- 'AI tagging only if you give it an OpenAI key - off by default'
|
|
first_steps:
|
|
- 'Open bookmarks.DOMAIN and create your account (the first account becomes the admin)'
|
|
- 'Press "Done, I set it up" on the app page - after that nobody else can sign up'
|
|
- 'Install the browser extension or the phone app and enter: https://bookmarks.DOMAIN and an API key (Settings, API keys)'
|
|
- 'Save your first bookmark'
|
|
deploy_fields:
|
|
- env_var: DOMAIN
|
|
label: 'Domain'
|
|
description: 'The server domain name'
|
|
- env_var: SUBDOMAIN
|
|
label: 'Subdomain'
|
|
description: 'The subdomain this app answers on'
|
|
- env_var: NEXTAUTH_SECRET
|
|
label: 'Session key'
|
|
- env_var: MEILI_MASTER_KEY
|
|
label: 'Search index key'
|
|
- env_var: OPENAI_API_KEY
|
|
label: 'OpenAI API key (optional)'
|
|
description: 'Left empty, automatic AI tagging is off and nothing leaves your server. If you enter one, the text of every new bookmark goes to OpenAI for tagging.'
|
|
|
|
# update_ladder — the test record: one tested step per line, oldest first (JSON flow mappings,
|
|
# `09-update-architecture.md` §6.4 part 4). WRITTEN BY scripts/upgrade-test.py, never by hand;
|
|
# gated by scripts/check-test-record.py. An image: move without a proven entry here is refused.
|
|
update_ladder:
|
|
- {"from": {"karakeep": "ghcr.io/karakeep-app/karakeep:0.33.1", "karakeep-chrome": "ghcr.io/karakeep-app/karakeep-chrome:151.0.7922.47-r1", "karakeep-meilisearch": "getmeili/meilisearch:v1.41.0"}, "to": {"karakeep": "ghcr.io/karakeep-app/karakeep:0.33.2", "karakeep-chrome": "ghcr.io/karakeep-app/karakeep-chrome:151.0.7922.47-r1", "karakeep-meilisearch": "getmeili/meilisearch:v1.41.0"}, "digest": {"karakeep": "sha256:b069e4307dec06ea06d16989c6861c30a1ff208568be44ed5fb5d422cd3e950c", "karakeep-chrome": "sha256:5b19bbb160e9ff60681a3abd97e1c4ec9f64212301410de658c3900ab7ef31e7", "karakeep-meilisearch": "sha256:860fa4baed04ae1c235de870edab0c8006227546dea1bbb6411fbfc5e27cf1db"}, "verdict": "proven", "tested_at": "2026-10-01T15:36:10Z", "harness_version": 4, "evidence": "felhom.eu/documentation/audits/new-apps-2026-10-01/bench/karakeep/evidence/MV-karakeep/verdict.json", "box_evidence": "felhom.eu/documentation/audits/new-apps-2026-10-01/box/karakeep/step.txt", "memory_peak_pct": 51.4, "marks": {"files_may_change": false, "needs_person": null, "memory_tight": false}, "memory_basis": "anon", "memory_cgroup_peak_pct": 55.4}
|