037f956519
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
145 lines
6.0 KiB
YAML
145 lines
6.0 KiB
YAML
# =============================================================================
|
|
# .felhom.yml - App metadata for felhom-controller
|
|
# =============================================================================
|
|
|
|
# --- Display info (shown on dashboard) ---
|
|
display_name: "Cal.com"
|
|
description: "Nyílt forráskódú időpontfoglaló (Calendly alternatíva)"
|
|
category: "travel"
|
|
subdomain: "cal"
|
|
slug: "calcom"
|
|
# 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-09-28"
|
|
|
|
# --- Resource hints (displayed on deploy screen) ---
|
|
resources:
|
|
mem_request: "200M"
|
|
mem_limit: "768M"
|
|
pi_compatible: false
|
|
needs_hdd: false
|
|
|
|
# --- Deploy fields (first deployment only) ---
|
|
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: "cal"
|
|
required: true
|
|
locked_after_deploy: true
|
|
description: "Az alkalmazás aldomainje"
|
|
|
|
- env_var: NEXTAUTH_SECRET
|
|
label: "NextAuth titkosítási kulcs"
|
|
type: secret
|
|
generate: "hex:32"
|
|
locked_after_deploy: true
|
|
|
|
- env_var: CALENDSO_ENCRYPTION_KEY
|
|
label: "Titkosítási kulcs"
|
|
type: secret
|
|
generate: "hex:16"
|
|
locked_after_deploy: true
|
|
|
|
- env_var: DB_PASSWORD
|
|
label: "Adatbázis jelszó"
|
|
type: secret
|
|
generate: "password:24"
|
|
locked_after_deploy: true
|
|
|
|
# --- App info (info page content) ---
|
|
app_info:
|
|
tagline: "Időpontfoglaló - Calendly alternatíva saját szerveren"
|
|
docs_url: "https://cal.com/docs/"
|
|
|
|
use_cases:
|
|
- 'Időpontfoglalási oldal létrehozása ügyfeleknek'
|
|
- 'Naptár szinkronizáció (Google Calendar, Outlook)'
|
|
- 'Személyre szabható foglalási típusok és időtartamok'
|
|
- 'Automatikus emlékeztető emailek'
|
|
- 'Csapat naptár kezelés'
|
|
|
|
first_steps:
|
|
- 'Nyisd meg a cal.DOMAIN címet a böngészőben'
|
|
- 'Hozd létre az admin fiókot'
|
|
- 'Állíts be egy foglalási típust (pl. 30 perces megbeszélés)'
|
|
- 'Szinkronizáld a naptáradat'
|
|
- 'Oszd meg a foglalási linket'
|
|
|
|
prerequisites:
|
|
- 'x86 processzor szükséges'
|
|
- 'Legalább 1 GB szabad RAM (Cal.com + PostgreSQL)'
|
|
|
|
# --- Controller-side health probe ---
|
|
healthcheck:
|
|
checks:
|
|
- type: api
|
|
port: 3000
|
|
# /api/health does not exist in cal.com v4.x (404); /api/auth/providers is a stable 200 once serving.
|
|
path: "/api/auth/providers"
|
|
expect:
|
|
status: 200
|
|
|
|
# --- App-email mapping (apps → in-controller shim → hub → Resend) ---
|
|
# Cal.com (Nodemailer) hard-codes TLS rejectUnauthorized=true with no skip flag and opportunistically
|
|
# STARTTLS-upgrades whenever the server offers it — so it cannot use the self-signed :2525 listener.
|
|
# tls_mode=plaintext points it at the :2526 listener, which does NOT advertise STARTTLS, so Cal.com never
|
|
# attempts TLS (plaintext on the single-tenant app bridge — accepted posture). secure is inferred from the
|
|
# port (≠465 → plaintext). EMAIL_SERVER_USER/PASSWORD stay unset (the shim accepts no-auth).
|
|
smtp_mapping:
|
|
tls_mode: plaintext
|
|
host_var: EMAIL_SERVER_HOST
|
|
port_var: EMAIL_SERVER_PORT
|
|
from_var: EMAIL_FROM
|
|
from_name_var: EMAIL_FROM_NAME
|
|
from_local: calcom
|
|
|
|
# --- English copy (localisation slice 5, R-560) --------------------------------------------
|
|
# The Hungarian above is UNCHANGED. A box on English reads this block field by field; a missing
|
|
# field shows the Hungarian one; a controller older than 0.257.0 ignores the block entirely.
|
|
i18n:
|
|
en:
|
|
description: 'Open source appointment booking (a Calendly alternative)'
|
|
app_info:
|
|
tagline: 'Appointment booking - a Calendly alternative on your own server'
|
|
use_cases:
|
|
- 'Give people a page where they can book time with you'
|
|
- 'Calendar sync (Google Calendar, Outlook)'
|
|
- 'Booking types and lengths you set yourself'
|
|
- 'Reminder e-mails go out on their own'
|
|
- 'Shared team calendars'
|
|
first_steps:
|
|
- 'Open cal.DOMAIN in your browser'
|
|
- 'Create the admin account'
|
|
- 'Set up a booking type (a 30 minute meeting, for example)'
|
|
- 'Connect your calendar'
|
|
- 'Share your booking link'
|
|
prerequisites:
|
|
- 'An x86 processor is needed'
|
|
- 'At least 1 GB of free RAM (Cal.com + PostgreSQL)'
|
|
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: DB_PASSWORD
|
|
label: 'Database password'
|
|
- env_var: CALENDSO_ENCRYPTION_KEY
|
|
label: 'Encryption key'
|
|
- env_var: NEXTAUTH_SECRET
|
|
label: 'NextAuth encryption key'
|
|
|
|
# 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": {"calcom": "calcom/cal.com:v6.2.0", "calcom-postgres": "postgres:16-alpine"}, "to": {"calcom": "calcom/cal.com:v6.2.0", "calcom-postgres": "postgres:18-alpine"}, "digest": {"calcom": "sha256:ace3bb1219fb7306585ab9f4d94d41af7ee064c343db0498173436bbe857bd49", "calcom-postgres": "sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873"}, "verdict": "proven", "tested_at": "2026-09-28T09:44:27Z", "harness_version": 4, "evidence": "felhom.eu/documentation/audits/pg-calcom-claper-2026-09-28/bench/apps/calcom/bench/evidence/MV-calcom/verdict.json", "box_evidence": "felhom.eu/documentation/audits/pg-calcom-claper-2026-09-28/box/calcom/box-verdict-calcom.json", "memory_peak_pct": 61.5, "marks": {"files_may_change": false, "needs_person": null, "memory_tight": false}, "memory_basis": "anon", "memory_cgroup_peak_pct": 100.0, "engine_conversion": {"service": "calcom-postgres", "engine": "postgres", "from": 16, "to": 18}}
|