diff --git a/Makefile b/Makefile index 76a4df3..0a9ac8d 100755 --- a/Makefile +++ b/Makefile @@ -13,10 +13,10 @@ FIPS := GOFIPS140=v1.0.0 BINDIR := bin DEPLOY_DIR := /tank/inou -.PHONY: all clean deploy deploy-prod sync linux lab tools help list fips-check check-db test test-rbac import-dicom import-genome import-lab nuke-imaging decrypt +.PHONY: all clean deploy deploy-prod sync linux lab tools help list fips-check check-db test test-rbac import-dicom import-renpho import-lab nuke-imaging decrypt # Default: build everything -all: linux lab $(BINDIR)/import-genome $(BINDIR)/import-dicom $(BINDIR)/import-lab $(BINDIR)/nuke-imaging +all: linux lab $(BINDIR)/import-renpho $(BINDIR)/import-dicom $(BINDIR)/import-lab $(BINDIR)/nuke-imaging # Linux binaries (native, FIPS) linux: $(BINDIR)/viewer $(BINDIR)/portal $(BINDIR)/api @@ -39,11 +39,6 @@ $(BINDIR)/lab-scrape: ./scrape_mychart/main.go | $(BINDIR) $(BINDIR)/lab-import: ./scrape_mychart/import.go | $(BINDIR) $(FIPS) go build $(LDFLAGS) -o $@ ./scrape_mychart/import.go -# Genome import tool -import-genome: $(BINDIR)/import-genome -$(BINDIR)/import-genome: ./import-genome/*.go ./lib/*.go | $(BINDIR) - $(FIPS) go build $(LDFLAGS) -o $@ ./import-genome - # DICOM import tool import-dicom: $(BINDIR)/import-dicom $(BINDIR)/import-dicom: ./import-dicom/*.go ./lib/*.go | $(BINDIR) @@ -65,7 +60,7 @@ $(BINDIR)/import-lab: ./cmd/import-lab/*.go ./lib/*.go | $(BINDIR) $(FIPS) go build $(LDFLAGS) -o $@ ./cmd/import-lab # Debug tools (no FIPS needed) -tools: $(BINDIR)/decrypt $(BINDIR)/fips-check $(BINDIR)/dbquery $(BINDIR)/toolkit +tools: $(BINDIR)/decrypt $(BINDIR)/fips-check $(BINDIR)/dbquery $(BINDIR)/toolkit $(BINDIR)/translate decrypt: $(BINDIR)/decrypt $(BINDIR)/decrypt: ./tools/decrypt/*.go ./lib/*.go | $(BINDIR) @@ -79,6 +74,10 @@ toolkit: $(BINDIR)/toolkit $(BINDIR)/toolkit: ./tools/toolkit/*.go ./lib/*.go | $(BINDIR) go build -o $@ ./tools/toolkit +translate: $(BINDIR)/translate +$(BINDIR)/translate: ./tools/translate/*.go | $(BINDIR) + go build -o $@ ./tools/translate + fips-check: $(BINDIR)/fips-check $(BINDIR)/fips-check: ./tools/fips-check/*.go | $(BINDIR) go build -o $@ ./tools/fips-check @@ -120,7 +119,7 @@ deploy-prod: check-db all $(BINDIR)/decrypt $(BINDIR)/fips-check ssh $(PROD_HOST) "$(DEPLOY_DIR)/stop.sh" ssh $(PROD_HOST) "mkdir -p $(DEPLOY_DIR)/bin $(DEPLOY_DIR)/templates $(DEPLOY_DIR)/static $(DEPLOY_DIR)/lang" scp $(BINDIR)/viewer $(BINDIR)/portal $(BINDIR)/api $(PROD_HOST):$(DEPLOY_DIR)/bin/ - scp $(BINDIR)/import-genome $(BINDIR)/import-dicom $(BINDIR)/import-lab $(BINDIR)/nuke-imaging $(BINDIR)/fips-check $(PROD_HOST):$(DEPLOY_DIR)/bin/ + scp $(BINDIR)/import-renpho $(BINDIR)/import-dicom $(BINDIR)/import-lab $(BINDIR)/nuke-imaging $(BINDIR)/fips-check $(PROD_HOST):$(DEPLOY_DIR)/bin/ scp $(BINDIR)/lab-* $(PROD_HOST):$(DEPLOY_DIR)/bin/ 2>/dev/null || true rsync -avz --delete portal/templates/ $(PROD_HOST):$(DEPLOY_DIR)/templates/ rsync -avz portal/static/ $(PROD_HOST):$(DEPLOY_DIR)/static/ @@ -171,7 +170,7 @@ help: @echo " make check-db - Verify no direct DB access (runs auto on deploy)" @echo " make test - Run integration tests (services must be running)" @echo " make test-rbac - Run RBAC permission tests (API must be running)" - @echo " make import-genome - Build genome import tool" + @echo " make import-renpho - Build Renpho import tool" @echo " make import-dicom - Build DICOM import tool" @echo " make import-lab - Build lab import tool" @echo " make tools - Build debug tools (decrypt)" diff --git a/portal/lang/da.yaml b/portal/lang/da.yaml index c688ab7..29b5b25 100644 --- a/portal/lang/da.yaml +++ b/portal/lang/da.yaml @@ -1,196 +1,271 @@ +language_name: Dansk + # Landing -headline_1: "Dine sundhedsdata." -headline_2: "Din AI." -headline_3: "Dine svar." -intro: "Upload billeddiagnostik, laboratorieresultater og mere. Forbind din AI for at hjælpe dig med at forstå, hvad du ser på." -email: "E-mail" -get_started: "Kom i gang" -data_yours: "Dine data forbliver dine" -never_training: "Bruges aldrig til træning" -never_training_desc: "Dine billeder bruges aldrig til at træne AI-modeller." -never_shared: "Deles aldrig" -never_shared_desc: "Vi deler aldrig dine data med nogen." -encrypted: "Krypteret lagring" -encrypted_desc: "Alle data krypteret i hvile." -delete: "Slet når som helst" -delete_desc: "Dine data, din kontrol." +headline_1: Dine sundhedsdata. +headline_2: Din AI. +headline_3: Dine svar. +intro: Upload billeder, laboratorieprøver og mere. Forbind din AI til at hjælpe dig med at forstå, hvad du kigger på. +email: E-mail +get_started: Kom i gang +data_yours: Dine data forbliver dine +never_training: Aldrig brugt til træning +never_training_desc: Dine billeder bruges aldrig til at træne AI-modeller. +never_shared: Aldrig delt +never_shared_desc: Vi deler aldrig dine data med nogen. +encrypted: Militærgrads kryptering +encrypted_desc: Hvilende og under transport. Dine data rejser aldrig ubeskyttet. +delete: Slet når som helst +delete_desc: Dine data, din kontrol. # Verify -check_email: "Tjek din e-mail" -code_sent_to: "Vi har sendt en 6-cifret kode til" -verification_code: "Bekræftelseskode" -verify: "Bekræft" -use_different_email: "Brug en anden e-mail" -invalid_code: "Ugyldig eller udløbet kode. Prøv igen." +check_email: Tjek din e-mail +code_sent_to: Vi sendte en 6-cifret kode til +verification_code: Verifikationskode +verify: Verificér +use_different_email: Brug en anden e-mail +invalid_code: Ugyldig eller udløbet kode. Prøv igen. # Onboard -create_dossier: "Opret din dosje" -create_profile_intro: "Fortæl os om dig selv for at komme i gang." -name: "Navn" -name_placeholder: "Dit navn" -date_of_birth: "Fødselsdato" -sex_at_birth: "Køn ved fødslen" -female: "Kvinde" -male: "Mand" -create_my_dossier: "Opret min dosje" +create_dossier: Opret dit dossier +create_profile_intro: Fortæl os om dig selv for at komme i gang. +name: Navn +name_placeholder: Dit navn +date_of_birth: Fødselsdato +sex_at_birth: Køn ved fødslen +female: Kvinde +male: Mand +create_my_dossier: Opret mit dossier # Minor error -must_be_18: "Du skal være 18 for at oprette en konto" -minor_explanation: "Hvis du opretter dette for en anden, start med din egen profil først. Dette sikrer, at kun du kan få adgang til deres sundhedsdata." -minor_next_steps: "Efter at have oprettet din dosje kan du tilføje andre." -use_different_dob: "Brug en anden fødselsdato" +must_be_18: Du skal være 18 for at oprette en konto +minor_explanation: Hvis du opsætter dette for en anden, start med din egen profil først. Dette sikrer, at kun du kan få adgang til deres sundhedsdata. +minor_next_steps: Efter at have oprettet dit dossier, kan du tilføje andre. +use_different_dob: Brug en anden fødselsdato # Minor login block -minor_login_blocked: "Du skal være 18 for at logge ind" -minor_ask_guardian: "Bed %s om adgang til din dosje." -minor_ask_guardian_generic: "Bed en forælder eller værge om adgang til din dosje." +minor_login_blocked: "You must be 18 to log in" +minor_ask_guardian: "Spørg %s om adgang til dit dossier." +minor_ask_guardian_generic: Spørg en forælder eller værge om adgang til dit dossier. # Dashboard -dossiers: "Dosjer" -dossiers_intro: "Administrer sundhedsdata for dig selv eller andre" -you: "dig" -view: "Vis" -save: "Gem" -cancel: "Annuller" -add_dossier: "Tilføj dosje" -edit_dossier: "Rediger dosje" -care: "pleje" -logout: "Log ud" +dossiers: Dossiers +dossiers_intro: Administrer sundhedsdata for dig selv eller andre +you: dig +view: Se +save: Gem +cancel: Annuller +add_dossier: Tilføj dossier +edit_dossier: Rediger dossier +care: pleje +logout: Log ud # Profile detail -back_to_dossiers: "Tilbage til dosjer" -born: "Født" -no_access_yet: "Kun du har adgang." -people_with_access: "Personer med adgang" -share_access: "Del adgang" -can_edit: "kan tilføje data" -remove: "Fjern" +back_to_dossiers: Tilbage til dossiers +born: Født +no_access_yet: Kun du har adgang. +people_with_access: Personer med adgang +share_access: Del adgang +manage_permissions: Administrer tilladelser +can_edit: kan tilføje data +remove: Fjern confirm_revoke: "Fjern adgang?" # Dossier sections -section_imaging: "Billeddiagnostik" -section_labs: "Lab" -section_uploads: "Uploads" -section_vitals: "Vitale tegn" -section_medications: "Medicin" -section_records: "Journaler" -section_journal: "Dagbog" -section_genetics: "Genetik" -section_privacy: "Privatliv" +section_imaging: Billeddiagnostik +section_labs: Laboratorier +section_uploads: Uploads +section_vitals: Værdier +section_medications: Medicin +section_records: Journaler +section_journal: Journal +section_checkin: Daglig Check-in +section_procedures: Procedurer +section_assessments: Vurderinger +section_genetics: Genetik +section_supplements: Kosttilskud +section_symptoms: Symptomer +section_hospitalizations: Indlæggelser +section_therapies: Terapier +section_consultations: Konsultationer +section_diagnoses: Diagnoser +section_exercise: Motion +section_nutrition: Ernæring +section_fertility: Frugtbarhed +section_notes: Noter +section_history: Sygdomshistorie +section_family_history: Familiehistorik +section_birth: Fødsel +section_devices: Enheder +section_providers: Udbudere +section_questions: Spørgsmål +section_privacy: Privatliv + +# Daily Check-in +checkin_summary: Spor vitale værdier, medicin, symptomer +checkin_build_profile: Tilføj det, du vil spore +btn_vitals: Værdier +btn_medications: Medicin +btn_supplements: Kosttilskud +btn_exercise: Motion + +# Plural forms (use %d for count) +slice_one: "%d slice" +slice_other: "%d slices" +series_one: "%d serie" +series_other: "%d serier" +order_one: "%d ordre" +order_other: "%d ordrer" +result_one: "%d resultat" +result_other: "%d resultater" # Section summaries -imaging_summary: "%d undersøgelser · %d snit" -no_imaging: "Ingen billeddata" -no_lab_data: "Ingen labdata" -no_genetics: "Ingen genetiske data" -no_files: "Ingen filer" -no_upload_access: "You don't have permission to upload" +imaging_summary: "%d undersøgelser · %d slices" +no_imaging: Ingen billeddata +no_lab_data: Ingen laboratoriedata +no_files: Ingen filer +no_upload_access: Du har ikke tilladelse til at uploade files_summary: "%d filer (%s)" series_count: "%d serier" -vitals_desc: "Blodtryk, puls, SpO₂, vægt, blodsukker" -medications_desc: "Recepter og kosttilskud" -records_desc: "Kliniske noter og journaler" -journal_desc: "Symptomer, smerte og observationer" +vitals_desc: Blodtryk, puls, SpO₂, vægt, glukose +medications_desc: Recepter og kosttilskud +records_desc: Kliniske noter og journaler +journal_desc: Symptomer, smerter og observationer # Buttons and actions -open_viewer: "Åbn visning" -manage: "Administrer" +open: Åbn +open_viewer: Åbn viewer +manage: Administrer show_all_studies: "Vis alle %d undersøgelser..." -coming_soon: "Kommer snart" +coming_soon: Kommer snart # Upload page -upload_files: "Upload sundhedsdata" -upload_files_intro: "Upload medicinsk billeddiagnostik, laboratorieresultater, genomfiler eller sundhedsrelaterede dokumenter." -upload_hint_broad: "DICOM, PDF, CSV, VCF og mere" -uploading: "Uploader..." -files_uploaded: "filer uploadet" -upload_scans: "Upload scanninger" -upload_scans_intro: "Upload en mappe med DICOM-filer fra din billedundersøgelse." -upload_drop: "Klik eller træk en mappe hertil" -upload_hint: "Kun DICOM-mapper" +upload_files: Upload sundhedsdata +upload_files_intro: Upload medicinsk billeddiagnostik, laboratorieresultater, genomfiler eller andre sundhedsrelaterede dokumenter. +upload_hint_broad: DICOM, PDF, CSV, VCF og mere +uploading: Uploader... +files_uploaded: filer uploadet +upload_scans: Upload scans +upload_scans_intro: Upload en mappe med DICOM-filer fra din billedundersøgelse. +upload_drop: Klik eller træk en mappe her +upload_hint: Kun DICOM-mapper # Add profile -add_dossier_intro: "Tilføj nogen, hvis sundhedsdata du vil administrere." -email_optional: "E-mail (valgfrit)" -email_optional_hint: "Hvis de er 18, kan de logge ind selv" -your_relation: "Dit forhold til dem" -select_relation: "Vælg..." -i_provide_care: "Jeg yder pleje til denne person" -i_am_their: "Jeg er deres..." +add_dossier_intro: Tilføj nogen, hvis sundhedsdata du vil administrere. +email_optional: E-mail (valgfrit) +email_optional_hint: Hvis de er 18+, kan de logge ind selv +your_relation: Din relation til dem +select_relation: Vælg relation... +i_provide_care: Jeg giver pleje til denne person # Share access -share_access_intro: "Inviter nogen til at få adgang" -their_relation: "Deres forhold til denne person" -can_add_data: "Kan tilføje data (kosttilskud, noter, osv.)" -send_invitation: "Send invitation" -back_to_dossier: "Tilbage til dosje" +share_access_intro: Inviter nogen til at få adgang +their_relation: Deres relation til denne person +can_add_data: Kan tilføje data +send_invitation: Send invitation +back_to_dossier: Tilbage til dossier # Relations -my_role: "min rolle" -role: "role" # Invitation email -invite_email_subject: "%s tilføjede dig til inou" -invite_email_body: "%s tilføjede din sundhedsdosje til inou, så du kan se og administrere dine medicinske data." -invite_email_cta: "Log ind for at se" -continue: "Fortsæt" +invite_email_subject: "%s har tilføjet dig til inou" +invite_email_body: "%s har tilføjet dit sundhedsdossier til inou, så du kan se og administrere dine medicinske data." +invite_email_cta: Log ind for at se +continue: Fortsæt +i_am_their: Jeg er deres... -# Access management -people_with_access_count: "personer med adgang" -view_audit_log: "Vis aktivitetslog" -export_data: "Download my data" -relation_with: "Forhold til" -audit_log: "Aktivitetslog" -audit_log_intro: "Aktivitetshistorik for" -audit_log_desc: "Spor hvem der har haft adgang til eller ændret denne dosje" +# Simple relation names (for display) +my_role: min rolle +role: rolle +section_privacy: Privatliv +people_with_access_count: personer med adgang +view_audit_log: Se revisionslog +export_data: Download mine data +relation_with: Relation med +audit_log: Revisionslog +audit_log_intro: Aktivitetshistorik for +audit_log_desc: Track hvem der fik adgang til eller redigerede dette dossier -# Install / Connect -install_title: "Forbind til Claude" -install_intro: "Opsæt inou-broen for at lade Claude analysere dine sundhedsdata" +# Permissions (RBAC) +permissions_title: Tilladelser +permissions_subtitle: Kontrollér hvem der kan få adgang til dette dossier og hvad de kan gøre +current_access: Nuværende adgang +grant_access: Giv adgang +no_grantees: Ingen andre har adgang til dette dossier. +person_email: E-mailadresse +person_email_hint: Hvis de ikke har en konto, vil de blive inviteret til at oprette en. +person_name: Navn +select_role: Vælg en rolle... +custom_role: Brugerdefinerede tilladelser +permissions: Tilladelser +op_read: Læs +op_write: Skriv +op_delete: Slet +op_manage: Administrer +grant: Giv adgang +revoke: Tilbagekald +role_descriptions: Rollebeskrivelser +ops_legend: Tilladelsesforklaring +op_read_desc: Se data +op_write_desc: Tilføj/rediger data +op_delete_desc: Fjern data +op_manage_desc: Administrer hvem der har adgang +permissions_updated: Tilladelser opdateret succesfuldt. +back: Tilbage +can_add_data: Kan tilføje data +install_title: Forbind til Claude +install_intro: Sæt inou bridge op for at lade Claude analysere dine sundhedsdata install_step1: "Trin 1: Download" -install_step1_desc: "Hent broen til din platform" -install_download_intro: "Download inou-broen til dit operativsystem:" +install_step1_desc: Hent bridge til din platform +install_download_intro: "Download inou bridge til dit operativsystem:" install_step2: "Trin 2: Konfigurer" -install_step2_desc: "Tilføj til Claude Desktop-konfigurationen" -install_config_intro: "Tilføj dette til din Claude Desktop-konfigurationsfil:" +install_step2_desc: Tilføj til Claude Desktop config +install_config_intro: "Tilføj dette til din Claude Desktop konfigurationsfil:" install_step3: "Trin 3: Test" -install_step3_desc: "Bekræft forbindelsen" -install_test_intro: "Genstart Claude Desktop og spørg: 'Vis mig mine inou-profiler'" -nav_install: "Forbind til Claude" -nav_home: "Hjem" +install_step3_desc: Verificer forbindelsen +install_test_intro: "Genstart Claude Desktop og spørg: 'Vis mig mine inou profiler'" +nav_install: Forbind til Claude +nav_home: Hjem +pending: afventer +rate_limit_exceeded: For mange tilmeldingsforsøg fra din placering. Prøv igen i morgen. +section_genetics: Genetik +no_genetics: Ingen genetiske data -# Status -pending: "afventer" -rate_limit_exceeded: "For mange tilmeldingsforsøg fra din placering. Prøv igen i morgen." - -# Sex display -sex_0: "ukendt" -sex_1: "mand" -sex_2: "kvinde" -sex_9: "andet" +sex_0: ukendt +sex_1: mand +sex_2: kvinde +sex_9: andet # Friend invite email friend_invite_subject: "Tjek dette ud — %s" -friend_invite_p1: "Jeg bruger inou, den sikre måde at opbevare sundhedsdata og udforske dem med AI. Det holder al min families sundhedsinformation ét sted — billedstudier, laboratorieresultater, journaler — og jeg tænkte, det måske også kunne være nyttigt for dig." -friend_invite_p2: "Den virkelige styrke ligger i at kunne bruge AI til at forstå det hele: forstå hvad en rapport faktisk betyder, opdage tendenser over tid, eller bare stille spørgsmål på almindeligt dansk og få klare svar." -friend_invite_btn: "Opdag inou" -friend_invite_dear: "Hej %s," -rel_0: "du" -rel_1: "Forælder" -rel_2: "Barn" -rel_3: "Ægtefælle" -rel_4: "Søskende" -rel_5: "Værge" -rel_6: "Omsorgsgiver" -rel_7: "Coach" -rel_8: "Læge" -rel_9: "Ven" -rel_10: "Andet" -rel_98: "Andet" -rel_99: "Demo" -select_relation: "Vælg relation..." +friend_invite_p1: "Jeg har brugt inou, den sikre måde at opbevare sundhedsdata og udforske dem med AI. Det holder al min families sundhedsoplysninger ét sted — billedundersøgelser, laboratorieresultater, journaler — og jeg tænkte, du måske også ville finde det nyttigt." +friend_invite_p2: "Den virkelige styrke er at kunne bruge AI til at give det hele mening: forstå, hvad en rapport faktisk betyder, spotte tendenser over tid, eller bare stille spørgsmål i almindeligt sprog og få klare svar." +friend_invite_btn: Tjek inou ud +friend_invite_dear: "Kære %s," +rel_0: dig +rel_1: Forælder +rel_2: Barn +rel_3: Ægtefælle +rel_4: Søskende +rel_5: Værge +rel_6: Omsorgsperson +rel_7: Coach +rel_8: Læge +rel_9: Ven +rel_10: Andet +rel_98: Andet +rel_99: Demo +select_relation: Vælg relation... +audit_dossier_added: "Nyt dossier for %s oprettet af %s" +audit_dossier_edited: "Dossier %s redigeret af %s" +audit_access_granted: "Adgang til %s givet til %s" +audit_dossier_created: "Konto oprettet af %s" +audit_access_revoked: "Adgang for %s til %s tilbagekaldt" +audit_file_upload: "Fil %s uploadet af %s" +audit_file_delete: "Fil %s slettet af %s" +audit_file_category_change: "Fil %s kategori ændret af %s" +audit_genome_import: "%s genetiske varianter importeret" -# Kategorier +# Categories (category000 = imaging, etc.) category000: Billeddiagnostik category001: Dokument category002: Laboratorieresultat @@ -198,44 +273,68 @@ category003: Genom category004: Upload category005: Konsultation category006: Diagnose -category007: Billedresultat -category008: EEG-resultat -category009: Vitalværdi +category007: Billeddiagnostisk fund +category008: EEG-fund +category009: Vitalparameter category010: Motion category011: Medicin -category012: Tilskud +category012: Kosttilskud category013: Ernæring -category014: Fertilitet +category014: Frugtbarhed category015: Symptom category016: Note -category017: Sygehistorie -category018: Familiehistorie +category017: Sygdomshistorie +category018: Familiehistorik category019: Kirurgi -category020: Hospitalsindlæggelse -category021: Fødselsdata +category020: Indlæggelse +category021: Fødselsjournal category022: Medicinsk udstyr category023: Terapi category024: Vurdering -category025: Sundhedsudbyder +category025: Udbuder category026: Spørgsmål # Genome -genome_english_only: "Al genetisk information er på engelsk. Brug Claude til at diskutere det på dansk." -genome_variants: "varianter" -genome_hidden: "skjulte" +genome_english_only: "" +genome_variants: varianter +genome_hidden: skjult genome_show_all_categories: "Vis alle %d kategorier" # API -api_token: "API Token" -api_token_use: "[EN] Use this token to authenticate API requests:" -api_token_warning: "[EN] Keep this private. Anyone with this token can access your health data." -api_token_none: "[EN] Generate a token to access the API programmatically or connect AI assistants." -api_token_generate: "Generate Token" -api_token_regenerate: "Regenerate Token" -api_token_regenerate_confirm: "[EN] This will invalidate your current token. Any connected apps will need to be updated." -api_authentication: "Authentication" -api_auth_instructions: "[EN] Include your API token in the Authorization header:" -copy: "Copy" -relation: "Relation" -relation_to: "Til" -me: "Mig" +api_token: API-token +api_token_use: "Brug denne token til at godkende API-anmodninger:" +api_token_warning: Hold dette privat. Alle med denne token kan få adgang til dine sundhedsdata. +api_token_none: "Generer en token for at få adgang til API'et programmatisk eller forbinde AI-assistenter." +api_token_generate: Generer token +api_token_regenerate: Regenerer token +api_token_regenerate_confirm: Dette ugyldiggør din nuværende token. Alle forbundne apps skal opdateres. +api_authentication: Godkendelse +api_auth_instructions: "Inkluder din API-token i Authorization-headeren:" +copy: Kopiér +relation: Relation +relation_to: Til +me: Mig + +# Languages (native names — do not translate) +lang_da: Dansk +lang_de: Deutsch +lang_en: English +lang_es: Español +lang_fi: Suomi +lang_fr: Français +lang_hi: हिन्दी +lang_id: Bahasa Indonesia +lang_it: Italiano +lang_ja: 日本語 +lang_ko: 한국어 +lang_nl: Nederlands +lang_no: Norsk +lang_pl: Polski +lang_pt: Português +lang_ru: Русский +lang_sv: Svenska +lang_th: ไทย +lang_tr: Türkçe +lang_uk: Українська +lang_vi: Tiếng Việt +lang_zh: 中文 diff --git a/portal/lang/de.yaml b/portal/lang/de.yaml index dad7465..8a8b208 100644 --- a/portal/lang/de.yaml +++ b/portal/lang/de.yaml @@ -1,196 +1,271 @@ +language_name: Deutsch + # Landing -headline_1: "Ihre Gesundheitsdaten." -headline_2: "Ihre KI." -headline_3: "Ihre Antworten." -intro: "Laden Sie Bildgebung, Laborergebnisse und mehr hoch. Verbinden Sie Ihre KI, um zu verstehen, was Sie sehen." -email: "E-Mail" -get_started: "Loslegen" -data_yours: "Ihre Daten bleiben Ihre" -never_training: "Nie für Training verwendet" -never_training_desc: "Ihre Bilder werden nie zum Trainieren von KI-Modellen verwendet." -never_shared: "Nie geteilt" -never_shared_desc: "Wir teilen Ihre Daten mit niemandem." -encrypted: "Verschlüsselte Speicherung" -encrypted_desc: "Alle Daten werden verschlüsselt gespeichert." -delete: "Jederzeit löschen" -delete_desc: "Ihre Daten, Ihre Kontrolle." +headline_1: Deine Gesundheitsdaten. +headline_2: Deine KI. +headline_3: Deine Antworten. +intro: Lade Bildgebung, Laborwerte und mehr hoch. Verbinde deine KI, um dir zu helfen zu verstehen, was du anschaust. +email: E-Mail +get_started: Loslegen +data_yours: Deine Daten bleiben deine +never_training: Nie für Training verwendet +never_training_desc: Deine Bilder werden niemals zum Trainieren von KI-Modellen verwendet. +never_shared: Nie geteilt +never_shared_desc: Wir teilen deine Daten nie mit irgendjemandem. +encrypted: Militärische Verschlüsselung +encrypted_desc: Ruhend und unterwegs. Deine Daten reisen nie ungeschützt. +delete: Jederzeit löschen +delete_desc: Deine Daten, deine Kontrolle. # Verify -check_email: "Überprüfen Sie Ihre E-Mail" -code_sent_to: "Wir haben einen 6-stelligen Code gesendet an" -verification_code: "Bestätigungscode" -verify: "Bestätigen" -use_different_email: "Andere E-Mail verwenden" -invalid_code: "Ungültiger oder abgelaufener Code. Bitte versuchen Sie es erneut." +check_email: Überprüfe deine E-Mail +code_sent_to: Wir haben einen 6-stelligen Code gesendet an +verification_code: Verifizierungscode +verify: Verifizieren +use_different_email: Andere E-Mail verwenden +invalid_code: Ungültiger oder abgelaufener Code. Bitte versuche es erneut. # Onboard -create_dossier: "Erstellen Sie Ihr Dossier" -create_profile_intro: "Erzählen Sie uns von sich, um loszulegen." -name: "Name" -name_placeholder: "Ihr Name" -date_of_birth: "Geburtsdatum" -sex_at_birth: "Geschlecht bei Geburt" -female: "Weiblich" -male: "Männlich" -create_my_dossier: "Mein Dossier erstellen" +create_dossier: Erstelle dein Dossier +create_profile_intro: Erzähl uns etwas über dich, um loszulegen. +name: Name +name_placeholder: Dein Name +date_of_birth: Geburtsdatum +sex_at_birth: Geschlecht bei Geburt +female: Weiblich +male: Männlich +create_my_dossier: Mein Dossier erstellen # Minor error -must_be_18: "Sie müssen 18 sein, um ein Konto zu erstellen" -minor_explanation: "Wenn Sie dies für jemand anderen einrichten, beginnen Sie zuerst mit Ihrem eigenen Profil. So stellen Sie sicher, dass nur Sie auf deren Gesundheitsdaten zugreifen können." -minor_next_steps: "Nach der Erstellung Ihres Dossiers können Sie weitere hinzufügen." -use_different_dob: "Anderes Geburtsdatum verwenden" +must_be_18: Du musst 18 sein, um ein Konto zu erstellen +minor_explanation: Wenn du dies für jemand anderen einrichtest, beginne zuerst mit deinem eigenen Profil. Dies stellt sicher, dass nur du auf ihre Gesundheitsdaten zugreifen kannst. +minor_next_steps: Nach dem Erstellen deines Dossiers kannst du andere hinzufügen. +use_different_dob: Anderes Geburtsdatum verwenden # Minor login block -minor_login_blocked: "Sie müssen 18 sein, um sich anzumelden" -minor_ask_guardian: "Bitten Sie %s, auf Ihr Dossier zuzugreifen." -minor_ask_guardian_generic: "Bitten Sie einen Elternteil oder Vormund, auf Ihr Dossier zuzugreifen." +minor_login_blocked: Du musst 18 sein, um dich anzumelden +minor_ask_guardian: "Frage %s, um auf dein Dossier zuzugreifen." +minor_ask_guardian_generic: Frage einen Elternteil oder Erziehungsberechtigten, um auf dein Dossier zuzugreifen. # Dashboard -dossiers: "Dossiers" -dossiers_intro: "Verwalten Sie Gesundheitsdaten für sich selbst oder andere" -you: "Sie" -view: "Ansehen" -save: "Speichern" -cancel: "Abbrechen" -add_dossier: "Dossier hinzufügen" -edit_dossier: "Dossier bearbeiten" -care: "Pflege" -logout: "Abmelden" +dossiers: Dossiers +dossiers_intro: Verwalte Gesundheitsdaten für dich oder andere +you: du +view: Ansehen +save: Speichern +cancel: Abbrechen +add_dossier: Dossier hinzufügen +edit_dossier: Dossier bearbeiten +care: Pflege +logout: Abmelden # Profile detail -back_to_dossiers: "Zurück zu Dossiers" -born: "Geboren" -no_access_yet: "Nur Sie haben Zugriff." -people_with_access: "Personen mit Zugriff" -share_access: "Zugriff teilen" -can_edit: "kann Daten hinzufügen" -remove: "Entfernen" -confirm_revoke: "Zugriff entfernen?" +back_to_dossiers: Zurück zu Dossiers +born: Geboren +no_access_yet: Nur du hast Zugriff. +people_with_access: Personen mit Zugriff +share_access: Zugriff teilen +manage_permissions: Berechtigungen verwalten +can_edit: kann Daten hinzufügen +remove: Entfernen +confirm_revoke: "Zugriff entziehen?" # Dossier sections -section_imaging: "Bildgebung" -section_labs: "Labor" -section_uploads: "Uploads" -section_vitals: "Vitalwerte" -section_medications: "Medikamente" -section_records: "Unterlagen" -section_journal: "Tagebuch" -section_genetics: "Genetik" -section_privacy: "Datenschutz" +section_imaging: Bildgebung +section_labs: Laborwerte +section_uploads: Uploads +section_vitals: Vitalwerte +section_medications: Medikamente +section_records: Aufzeichnungen +section_journal: Tagebuch +section_checkin: Tägliches Check-in +section_procedures: Eingriffe +section_assessments: Bewertungen +section_genetics: Genetik +section_supplements: Nahrungsergänzungsmittel +section_symptoms: Symptome +section_hospitalizations: Krankenhausaufenthalte +section_therapies: Therapien +section_consultations: Konsultationen +section_diagnoses: Diagnosen +section_exercise: Sport +section_nutrition: Ernährung +section_fertility: Fruchtbarkeit +section_notes: Notizen +section_history: Krankengeschichte +section_family_history: Familienanamnese +section_birth: Geburt +section_devices: Geräte +section_providers: Anbieter +section_questions: Fragen +section_privacy: Datenschutz + +# Daily Check-in +checkin_summary: Tracke Vitalwerte, Medikamente, Symptome +checkin_build_profile: Füge hinzu, was du tracken möchtest +btn_vitals: Vitalwerte +btn_medications: Medikamente +btn_supplements: Nahrungsergänzungsmittel +btn_exercise: Sport + +# Plural forms (use %d for count) +slice_one: "%d Slice" +slice_other: "%d Slices" +series_one: "%d Serie" +series_other: "%d Serien" +order_one: "%d Bestellung" +order_other: "%d Bestellungen" +result_one: "%d Ergebnis" +result_other: "%d Ergebnisse" # Section summaries -imaging_summary: "%d Studien · %d Schichten" -no_imaging: "Keine Bildgebungsdaten" -no_lab_data: "Keine Labordaten" -no_genetics: "Keine genetischen Daten" -no_files: "Keine Dateien" -no_upload_access: "You don't have permission to upload" +imaging_summary: "%d Studien · %d Slices" +no_imaging: Keine Bildgebungsdaten +no_lab_data: Keine Laborwerte +no_files: Keine Dateien +no_upload_access: Du hast keine Berechtigung zum Hochladen files_summary: "%d Dateien (%s)" series_count: "%d Serien" -vitals_desc: "Blutdruck, Herzfrequenz, SpO₂, Gewicht, Glukose" -medications_desc: "Rezepte und Nahrungsergänzungsmittel" -records_desc: "Klinische Notizen und Krankenakten" -journal_desc: "Symptome, Schmerzen und Beobachtungen" +vitals_desc: Blutdruck, Herzfrequenz, SpO₂, Gewicht, Glukose +medications_desc: Rezepte und Nahrungsergänzungsmittel +records_desc: Klinische Notizen und medizinische Aufzeichnungen +journal_desc: Symptome, Schmerzen und Beobachtungen # Buttons and actions -open_viewer: "Viewer öffnen" -manage: "Verwalten" +open: Öffnen +open_viewer: Viewer öffnen +manage: Verwalten show_all_studies: "Alle %d Studien anzeigen..." -coming_soon: "Demnächst" +coming_soon: Demnächst # Upload page -upload_files: "Gesundheitsdaten hochladen" -upload_files_intro: "Laden Sie medizinische Bildgebung, Laborergebnisse, Genomdateien oder andere gesundheitsbezogene Dokumente hoch." -upload_hint_broad: "DICOM, PDF, CSV, VCF und mehr" -uploading: "Wird hochgeladen..." -files_uploaded: "Dateien hochgeladen" -upload_scans: "Scans hochladen" -upload_scans_intro: "Laden Sie einen Ordner mit DICOM-Dateien aus Ihrer Bildgebungsstudie hoch." -upload_drop: "Klicken oder Ordner hierher ziehen" -upload_hint: "Nur DICOM-Ordner" +upload_files: Gesundheitsdaten hochladen +upload_files_intro: Lade medizinische Bildgebung, Laborergebnisse, Genomdateien oder beliebige gesundheitsbezogene Dokumente hoch. +upload_hint_broad: DICOM, PDF, CSV, VCF und mehr +uploading: Wird hochgeladen... +files_uploaded: Dateien hochgeladen +upload_scans: Scans hochladen +upload_scans_intro: Lade einen Ordner mit DICOM-Dateien von deiner Bildgebungsstudie hoch. +upload_drop: Klicke oder ziehe einen Ordner hierher +upload_hint: Nur DICOM-Ordner # Add profile -add_dossier_intro: "Fügen Sie jemanden hinzu, dessen Gesundheitsdaten Sie verwalten möchten." -email_optional: "E-Mail (optional)" -email_optional_hint: "Wenn sie 18 sind, können sie sich selbst anmelden" -your_relation: "Ihre Beziehung zu dieser Person" -select_relation: "Auswählen..." -i_provide_care: "Ich pflege diese Person" -i_am_their: "Ich bin deren..." +add_dossier_intro: Füge jemanden hinzu, dessen Gesundheitsdaten du verwalten möchtest. +email_optional: E-Mail (optional) +email_optional_hint: Wenn sie 18+ sind, können sie sich selbst einloggen +your_relation: Deine Beziehung zu ihnen +select_relation: Beziehung auswählen... +i_provide_care: Ich pflege diese Person # Share access -share_access_intro: "Jemanden zum Zugriff einladen" -their_relation: "Deren Beziehung zu dieser Person" -can_add_data: "Kann Daten hinzufügen (Nahrungsergänzungsmittel, Notizen, usw.)" -send_invitation: "Einladung senden" -back_to_dossier: "Zurück zum Dossier" +share_access_intro: Jemanden einladen, zuzugreifen +their_relation: Ihre Beziehung zu dieser Person +can_add_data: Kann Daten hinzufügen +send_invitation: Einladung senden +back_to_dossier: Zurück zum Dossier # Relations -my_role: "meine Rolle" -role: "role" # Invitation email -invite_email_subject: "%s hat Sie zu inou hinzugefügt" -invite_email_body: "%s hat Ihr Gesundheitsdossier zu inou hinzugefügt, damit Sie Ihre medizinischen Daten einsehen und verwalten können." -invite_email_cta: "Anmelden zum Ansehen" -continue: "Weiter" +invite_email_subject: "%s hat dich zu inou hinzugefügt" +invite_email_body: "%s hat dein Gesundheitsdossier zu inou hinzugefügt, damit du deine medizinischen Daten ansehen und verwalten kannst." +invite_email_cta: Anmelden zum Ansehen +continue: Weiter +i_am_their: Ich bin ihr/e... -# Access management -people_with_access_count: "Personen mit Zugriff" -view_audit_log: "Aktivitätsprotokoll ansehen" -export_data: "Download my data" -relation_with: "Beziehung zu" -audit_log: "Aktivitätsprotokoll" -audit_log_intro: "Aktivitätsverlauf für" -audit_log_desc: "Verfolgen Sie, wer auf dieses Dossier zugegriffen oder es geändert hat" +# Simple relation names (for display) +my_role: meine Rolle +role: Rolle +section_privacy: Datenschutz +people_with_access_count: Personen mit Zugriff +view_audit_log: Audit-Protokoll ansehen +export_data: Meine Daten herunterladen +relation_with: Beziehung mit +audit_log: Audit-Protokoll +audit_log_intro: Aktivitätsverlauf für +audit_log_desc: Verfolge, wer auf dieses Dossier zugegriffen oder es geändert hat -# Install / Connect -install_title: "Mit Claude verbinden" -install_intro: "Richten Sie die inou-Bridge ein, damit Claude Ihre Gesundheitsdaten analysieren kann" +# Permissions (RBAC) +permissions_title: Berechtigungen +permissions_subtitle: Kontrolliere, wer auf dieses Dossier zugreifen kann und was sie tun können +current_access: Aktueller Zugriff +grant_access: Zugriff gewähren +no_grantees: Niemand anderes hat Zugriff auf dieses Dossier. +person_email: E-Mail-Adresse +person_email_hint: Wenn sie kein Konto haben, werden sie eingeladen, eines zu erstellen. +person_name: Name +select_role: Rolle auswählen... +custom_role: Benutzerdefinierte Berechtigungen +permissions: Berechtigungen +op_read: Lesen +op_write: Schreiben +op_delete: Löschen +op_manage: Verwalten +grant: Zugriff gewähren +revoke: Widerrufen +role_descriptions: Rollenbeschreibungen +ops_legend: Berechtigungslegende +op_read_desc: Daten ansehen +op_write_desc: Daten hinzufügen/bearbeiten +op_delete_desc: Daten entfernen +op_manage_desc: Verwalte, wer Zugriff hat +permissions_updated: Berechtigungen erfolgreich aktualisiert. +back: Zurück +can_add_data: Kann Daten hinzufügen +install_title: Mit Claude verbinden +install_intro: Richte die inou Bridge ein, damit Claude deine Gesundheitsdaten analysieren kann install_step1: "Schritt 1: Herunterladen" -install_step1_desc: "Laden Sie die Bridge für Ihre Plattform herunter" -install_download_intro: "Laden Sie die inou-Bridge für Ihr Betriebssystem herunter:" +install_step1_desc: Hole dir die Bridge für deine Plattform +install_download_intro: "Lade die inou Bridge für dein Betriebssystem herunter:" install_step2: "Schritt 2: Konfigurieren" -install_step2_desc: "Zur Claude Desktop-Konfiguration hinzufügen" -install_config_intro: "Fügen Sie dies zu Ihrer Claude Desktop-Konfigurationsdatei hinzu:" +install_step2_desc: Zur Claude Desktop Konfiguration hinzufügen +install_config_intro: "Füge dies zu deiner Claude Desktop Konfigurationsdatei hinzu:" install_step3: "Schritt 3: Testen" -install_step3_desc: "Verbindung überprüfen" -install_test_intro: "Starten Sie Claude Desktop neu und fragen Sie: 'Zeige mir meine inou-Profile'" -nav_install: "Mit Claude verbinden" -nav_home: "Startseite" +install_step3_desc: Verifiziere die Verbindung +install_test_intro: "Starte Claude Desktop neu und frage: 'Zeig mir meine inou Profile'" +nav_install: Mit Claude verbinden +nav_home: Startseite +pending: ausstehend +rate_limit_exceeded: Zu viele Anmeldeversuche von deinem Standort. Bitte versuche es morgen erneut. +section_genetics: Genetik +no_genetics: Keine genetischen Daten -# Status -pending: "ausstehend" -rate_limit_exceeded: "Zu viele Anmeldeversuche von Ihrem Standort. Bitte versuchen Sie es morgen erneut." - -# Sex display -sex_0: "unbekannt" -sex_1: "männlich" -sex_2: "weiblich" -sex_9: "andere" +sex_0: unbekannt +sex_1: männlich +sex_2: weiblich +sex_9: andere # Friend invite email friend_invite_subject: "Schau dir das an — %s" -friend_invite_p1: "Ich nutze inou, die sichere Art, Gesundheitsdaten zu speichern und mit KI zu erkunden. Es hält alle Gesundheitsinformationen meiner Familie an einem Ort — Bildgebung, Laborergebnisse, Krankenakten — und ich dachte, es könnte auch für dich nützlich sein." -friend_invite_p2: "Die wahre Stärke liegt darin, KI nutzen zu können, um alles zu verstehen: zu verstehen, was ein Bericht wirklich bedeutet, Trends über die Zeit zu erkennen, oder einfach Fragen in normaler Sprache zu stellen und klare Antworten zu bekommen." -friend_invite_btn: "Entdecke inou" +friend_invite_p1: "Ich nutze inou, die sichere Methode, um Gesundheitsdaten zu speichern und mit KI zu analysieren. Es speichert alle Gesundheitsinformationen meiner Familie an einem Ort – Bildgebungsstudien, Laborergebnisse, medizinische Aufzeichnungen – und ich dachte, du könntest es auch nützlich finden." +friend_invite_p2: "Die wahre Kraft liegt darin, KI nutzen zu können, um alles zu verstehen: verstehe, was ein Bericht wirklich bedeutet, erkenne Trends über Zeit, oder stell einfach Fragen in einfacher Sprache und erhalte klare Antworten." +friend_invite_btn: Schau dir inou an friend_invite_dear: "Liebe/r %s," -rel_0: "du" -rel_1: "Elternteil" -rel_2: "Kind" -rel_3: "Ehepartner" -rel_4: "Geschwister" -rel_5: "Vormund" -rel_6: "Betreuer" -rel_7: "Coach" -rel_8: "Arzt" -rel_9: "Freund" -rel_10: "Andere" -rel_98: "Andere" -rel_99: "Demo" -select_relation: "Beziehung auswählen..." +rel_0: du +rel_1: Elternteil +rel_2: Kind +rel_3: Ehepartner/in +rel_4: Geschwister +rel_5: Erziehungsberechtigte/r +rel_6: Pflegeperson +rel_7: Coach +rel_8: Arzt/Ärztin +rel_9: Freund/in +rel_10: Andere/r +rel_98: Andere/r +rel_99: Demo +select_relation: Beziehung auswählen... +audit_dossier_added: "Neues Dossier für %s erstellt von %s" +audit_dossier_edited: "Dossier %s bearbeitet von %s" +audit_access_granted: "Zugriff auf %s gewährt für %s" +audit_dossier_created: "Konto erstellt von %s" +audit_access_revoked: "Zugriff für %s auf %s widerrufen" +audit_file_upload: "Datei %s hochgeladen von %s" +audit_file_delete: "Datei %s gelöscht von %s" +audit_file_category_change: "Datei %s Kategorie geändert von %s" +audit_genome_import: "%s genetische Varianten importiert" -# Kategorien +# Categories (category000 = imaging, etc.) category000: Bildgebung category001: Dokument category002: Laborergebnis @@ -198,12 +273,12 @@ category003: Genom category004: Upload category005: Konsultation category006: Diagnose -category007: Bildgebungsergebnis -category008: EEG-Ergebnis -category009: Vitalwert -category010: Bewegung +category007: Bildgebungsbefund +category008: EEG-Befund +category009: Vitalzeichen +category010: Sport category011: Medikament -category012: Nahrungsergänzung +category012: Nahrungsergänzungsmittel category013: Ernährung category014: Fruchtbarkeit category015: Symptom @@ -212,30 +287,54 @@ category017: Krankengeschichte category018: Familienanamnese category019: Operation category020: Krankenhausaufenthalt -category021: Geburtsdaten +category021: Geburtsurkunde category022: Medizinisches Gerät category023: Therapie category024: Bewertung -category025: Gesundheitsdienstleister +category025: Anbieter category026: Frage # Genome -genome_english_only: "Alle genetischen Informationen sind auf Englisch. Verwenden Sie Claude, um sie auf Deutsch zu besprechen." -genome_variants: "Varianten" -genome_hidden: "verborgen" +genome_english_only: "" +genome_variants: Varianten +genome_hidden: versteckt genome_show_all_categories: "Alle %d Kategorien anzeigen" # API -api_token: "API Token" -api_token_use: "[EN] Use this token to authenticate API requests:" -api_token_warning: "[EN] Keep this private. Anyone with this token can access your health data." -api_token_none: "[EN] Generate a token to access the API programmatically or connect AI assistants." -api_token_generate: "Generate Token" -api_token_regenerate: "Regenerate Token" -api_token_regenerate_confirm: "[EN] This will invalidate your current token. Any connected apps will need to be updated." -api_authentication: "Authentication" -api_auth_instructions: "[EN] Include your API token in the Authorization header:" -copy: "Copy" -relation: "Beziehung" -relation_to: "Zu" -me: "Ich" +api_token: API-Token +api_token_use: "Verwende diesen Token für die Authentifizierung von API-Anfragen:" +api_token_warning: Bewahre dies privat auf. Jeder mit diesem Token kann auf deine Gesundheitsdaten zugreifen. +api_token_none: Generiere einen Token für den programmatischen API-Zugriff oder um KI-Assistenten zu verbinden. +api_token_generate: Token generieren +api_token_regenerate: Token neu generieren +api_token_regenerate_confirm: Dies macht deinen aktuellen Token ungültig. Alle verbundenen Apps müssen aktualisiert werden. +api_authentication: Authentifizierung +api_auth_instructions: "Füge deinen API-Token in den Authorization-Header ein:" +copy: Kopieren +relation: Beziehung +relation_to: Zu +me: Ich + +# Languages (native names — do not translate) +lang_da: Dansk +lang_de: Deutsch +lang_en: English +lang_es: Español +lang_fi: Suomi +lang_fr: Français +lang_hi: हिन्दी +lang_id: Bahasa Indonesia +lang_it: Italiano +lang_ja: 日本語 +lang_ko: 한국어 +lang_nl: Nederlands +lang_no: Norsk +lang_pl: Polski +lang_pt: Português +lang_ru: Русский +lang_sv: Svenska +lang_th: ไทย +lang_tr: Türkçe +lang_uk: Українська +lang_vi: Tiếng Việt +lang_zh: 中文 diff --git a/portal/lang/en.yaml b/portal/lang/en.yaml index b38c730..08c77f5 100644 --- a/portal/lang/en.yaml +++ b/portal/lang/en.yaml @@ -1,3 +1,5 @@ +language_name: English + # Landing headline_1: "Your health data." headline_2: "Your AI." @@ -312,3 +314,27 @@ copy: "Copy" relation: "Relation" relation_to: "To" me: "Me" + +# Languages (native names — do not translate) +lang_da: Dansk +lang_de: Deutsch +lang_en: English +lang_es: Español +lang_fi: Suomi +lang_fr: Français +lang_hi: हिन्दी +lang_id: Bahasa Indonesia +lang_it: Italiano +lang_ja: 日本語 +lang_ko: 한국어 +lang_nl: Nederlands +lang_no: Norsk +lang_pl: Polski +lang_pt: Português +lang_ru: Русский +lang_sv: Svenska +lang_th: ไทย +lang_tr: Türkçe +lang_uk: Українська +lang_vi: Tiếng Việt +lang_zh: 中文 diff --git a/portal/lang/es.yaml b/portal/lang/es.yaml index 192fe71..2e09fae 100644 --- a/portal/lang/es.yaml +++ b/portal/lang/es.yaml @@ -1,205 +1,280 @@ +language_name: Español + # Landing -headline_1: "Tus datos de salud." -headline_2: "Tu IA." -headline_3: "Tus respuestas." -intro: "Sube imágenes médicas, análisis y más. Conecta tu IA para ayudarte a entender lo que estás viendo." -email: "Correo electrónico" -get_started: "Comenzar" -data_yours: "Tus datos son tuyos" -never_training: "Nunca usados para entrenamiento" -never_training_desc: "Tus imágenes nunca se usan para entrenar modelos de IA." -never_shared: "Nunca compartidos" -never_shared_desc: "Nunca compartimos tus datos con nadie." -encrypted: "Almacenamiento cifrado" -encrypted_desc: "Todos los datos cifrados en reposo." -delete: "Eliminar en cualquier momento" -delete_desc: "Tus datos, tu control." +headline_1: Tus datos de salud. +headline_2: Tu IA. +headline_3: Tus respuestas. +intro: Sube imagenología, laboratorios y más. Conecta tu IA para ayudarte a entender lo que estás viendo. +email: Correo electrónico +get_started: Comenzar +data_yours: Tus datos siguen siendo tuyos +never_training: Nunca usado para entrenamiento +never_training_desc: Tus imágenes nunca se usan para entrenar modelos de IA. +never_shared: Nunca compartido +never_shared_desc: Nunca compartimos tus datos con nadie. +encrypted: Cifrado de grado militar +encrypted_desc: En reposo y en tránsito. Tus datos nunca viajan sin protección. +delete: Eliminar en cualquier momento +delete_desc: Tus datos, tu control. # Verify -check_email: "Revisa tu correo" -code_sent_to: "Enviamos un código de 6 dígitos a" -verification_code: "Código de verificación" -verify: "Verificar" -use_different_email: "Usar otro correo" -invalid_code: "Código inválido o expirado. Por favor, inténtalo de nuevo." +check_email: Revisa tu correo electrónico +code_sent_to: Enviamos un código de 6 dígitos a +verification_code: Código de verificación +verify: Verificar +use_different_email: Usar un correo electrónico diferente +invalid_code: Código inválido o expirado. Por favor intenta de nuevo. # Onboard -create_dossier: "Crea tu expediente" -create_profile_intro: "Cuéntanos sobre ti para comenzar." -name: "Nombre" -name_placeholder: "Tu nombre" -date_of_birth: "Fecha de nacimiento" -sex_at_birth: "Sexo al nacer" -female: "Femenino" -male: "Masculino" -create_my_dossier: "Crear mi expediente" +create_dossier: Crea tu expediente +create_profile_intro: Cuéntanos sobre ti para comenzar. +name: Nombre +name_placeholder: Tu nombre +date_of_birth: Fecha de nacimiento +sex_at_birth: Sexo al nacer +female: Femenino +male: Masculino +create_my_dossier: Crear mi expediente # Minor error -must_be_18: "Debes tener 18 años para crear una cuenta" -minor_explanation: "Si estás configurando esto para otra persona, comienza primero con tu propio perfil. Esto asegura que solo tú puedas acceder a sus datos de salud." -minor_next_steps: "Después de crear tu expediente, puedes agregar otros." -use_different_dob: "Usar otra fecha de nacimiento" +must_be_18: Debes tener 18 años para crear una cuenta +minor_explanation: Si estás configurando esto para alguien más, comienza con tu propio perfil primero. Esto asegura que solo tú puedas acceder a sus datos de salud. +minor_next_steps: Después de crear tu expediente, puedes agregar a otros. +use_different_dob: Usar una fecha de nacimiento diferente # Minor login block -minor_login_blocked: "Debes tener 18 años para iniciar sesión" +minor_login_blocked: "You must be 18 to log in" minor_ask_guardian: "Pide a %s que acceda a tu expediente." -minor_ask_guardian_generic: "Pide a un padre o tutor que acceda a tu expediente." +minor_ask_guardian_generic: Pide a un padre o tutor que acceda a tu expediente. # Dashboard -dossiers: "Expedientes" -dossiers_intro: "Gestiona datos de salud para ti o para otros" -you: "tú" -view: "Ver" -save: "Guardar" -cancel: "Cancelar" -add_dossier: "Agregar expediente" -edit_dossier: "Editar expediente" -care: "cuidado" -logout: "Cerrar sesión" +dossiers: Expedientes +dossiers_intro: Gestiona datos de salud para ti o para otros +you: tú +view: Ver +save: Guardar +cancel: Cancelar +add_dossier: Agregar expediente +edit_dossier: Editar expediente +care: cuidado +logout: Cerrar sesión # Profile detail -back_to_dossiers: "Volver a expedientes" -born: "Nacido/a" -no_access_yet: "Solo tú tienes acceso." -people_with_access: "Personas con acceso" -share_access: "Compartir acceso" -can_edit: "puede agregar datos" -remove: "Eliminar" +back_to_dossiers: Volver a expedientes +born: Nacido/a +no_access_yet: Solo tú tienes acceso. +people_with_access: Personas con acceso +share_access: Compartir acceso +manage_permissions: Gestionar permisos +can_edit: puede agregar datos +remove: Eliminar confirm_revoke: "¿Eliminar acceso?" # Dossier sections -section_imaging: "Imágenes" -section_labs: "Laboratorio" -section_uploads: "Archivos" -section_vitals: "Signos vitales" -section_medications: "Medicamentos" -section_records: "Registros" -section_journal: "Diario" -section_genetics: "Genética" -section_privacy: "Privacidad" +section_imaging: Imagenología +section_labs: Laboratorios +section_uploads: Subidas +section_vitals: Signos vitales +section_medications: Medicamentos +section_records: Registros +section_journal: Diario +section_checkin: Registro diario +section_procedures: Procedimientos +section_assessments: Evaluaciones +section_genetics: Genética +section_supplements: Suplementos +section_symptoms: Síntomas +section_hospitalizations: Hospitalizaciones +section_therapies: Terapias +section_consultations: Consultas +section_diagnoses: Diagnósticos +section_exercise: Ejercicio +section_nutrition: Nutrición +section_fertility: Fertilidad +section_notes: Notas +section_history: Historial médico +section_family_history: Historial familiar +section_birth: Nacimiento +section_devices: Dispositivos +section_providers: Proveedores +section_questions: Preguntas +section_privacy: Privacidad + +# Daily Check-in +checkin_summary: Registra signos vitales, medicamentos, síntomas +checkin_build_profile: Agrega lo que quieres seguir +btn_vitals: Signos vitales +btn_medications: Medicamentos +btn_supplements: Suplementos +btn_exercise: Ejercicio + +# Plural forms (use %d for count) +slice_one: "%d corte" +slice_other: "%d cortes" +series_one: "%d serie" +series_other: "%d series" +order_one: "%d orden" +order_other: "%d órdenes" +result_one: "%d resultado" +result_other: "%d resultados" # Section summaries imaging_summary: "%d estudios · %d cortes" -no_imaging: "Sin datos de imágenes" -no_lab_data: "Sin datos de laboratorio" -no_genetics: "Sin datos genéticos" -no_files: "Sin archivos" -no_upload_access: "You don't have permission to upload" +no_imaging: Sin datos de imagenología +no_lab_data: Sin datos de laboratorio +no_files: Sin archivos +no_upload_access: No tienes permiso para subir files_summary: "%d archivos (%s)" series_count: "%d series" -vitals_desc: "Presión arterial, frecuencia cardíaca, SpO₂, peso, glucosa" -medications_desc: "Recetas y suplementos" -records_desc: "Notas clínicas e historiales médicos" -journal_desc: "Síntomas, dolor y observaciones" +vitals_desc: Presión arterial, frecuencia cardíaca, SpO₂, peso, glucosa +medications_desc: Recetas y suplementos +records_desc: Notas clínicas y registros médicos +journal_desc: Síntomas, dolor y observaciones # Buttons and actions -open_viewer: "Abrir visor" -manage: "Gestionar" +open: Abrir +open_viewer: Abrir visor +manage: Gestionar show_all_studies: "Mostrar los %d estudios..." -coming_soon: "Próximamente" +coming_soon: Próximamente # Upload page -upload_files: "Subir datos de salud" -upload_files_intro: "Sube imágenes médicas, resultados de laboratorio, archivos genómicos o cualquier documento relacionado con la salud." -upload_hint_broad: "DICOM, PDF, CSV, VCF y más" -uploading: "Subiendo..." -files_uploaded: "archivos subidos" -upload_scans: "Subir estudios" -upload_scans_intro: "Sube una carpeta con archivos DICOM de tu estudio de imágenes." -upload_drop: "Haz clic o arrastra una carpeta aquí" -upload_hint: "Solo carpetas DICOM" +upload_files: Subir datos de salud +upload_files_intro: Sube imagenología médica, resultados de laboratorio, archivos de genoma o cualquier documento relacionado con la salud. +upload_hint_broad: DICOM, PDF, CSV, VCF y más +uploading: Subiendo... +files_uploaded: archivos subidos +upload_scans: Subir escaneos +upload_scans_intro: Sube una carpeta que contenga archivos DICOM de tu estudio de imagenología. +upload_drop: Haz clic o arrastra una carpeta aquí +upload_hint: Solo carpetas DICOM # Add profile -add_dossier_intro: "Agrega a alguien cuyos datos de salud quieras gestionar." -email_optional: "Correo (opcional)" -email_optional_hint: "Si tienen 18, pueden iniciar sesión ellos mismos" -your_relation: "Tu relación con esta persona" -select_relation: "Seleccionar..." -i_provide_care: "Proporciono cuidado a esta persona" -i_am_their: "Soy su..." +add_dossier_intro: Agrega a alguien cuyos datos de salud quieres gestionar. +email_optional: Correo electrónico (opcional) +email_optional_hint: Si tiene más de 18 años, puede iniciar sesión por sí mismo +your_relation: Tu relación con ellos +select_relation: Selecciona relación... +i_provide_care: Brindo cuidado a esta persona # Share access -share_access_intro: "Invitar a alguien a acceder" -their_relation: "Su relación con esta persona" -can_add_data: "Puede agregar datos (suplementos, notas, etc.)" -send_invitation: "Enviar invitación" -back_to_dossier: "Volver al expediente" +share_access_intro: Invita a alguien a acceder +their_relation: Su relación con esta persona +can_add_data: Puede agregar datos +send_invitation: Enviar invitación +back_to_dossier: Volver al expediente # Relations -my_role: "mi rol" -role: "role" # Invitation email invite_email_subject: "%s te agregó a inou" invite_email_body: "%s agregó tu expediente de salud a inou para que puedas ver y gestionar tus datos médicos." -invite_email_cta: "Iniciar sesión para ver" -continue: "Continuar" +invite_email_cta: Iniciar sesión para ver +continue: Continuar +i_am_their: Soy su... -# Access management -people_with_access_count: "personas con acceso" -view_audit_log: "Ver registro de actividad" -export_data: "Download my data" -relation_with: "Relación con" -audit_log: "Registro de actividad" -audit_log_intro: "Historial de actividad para" -audit_log_desc: "Rastrea quién accedió o modificó este expediente" +# Simple relation names (for display) +my_role: mi rol +role: rol +section_privacy: Privacidad +people_with_access_count: personas con acceso +view_audit_log: Ver registro de auditoría +export_data: Descargar mis datos +relation_with: Relación con +audit_log: Registro de auditoría +audit_log_intro: Historial de actividad para +audit_log_desc: Rastrea quién accedió o modificó este expediente -# Install / Connect -install_title: "Conectar con Claude" -install_intro: "Configura el puente inou para que Claude analice tus datos de salud" +# Permissions (RBAC) +permissions_title: Permisos +permissions_subtitle: Controla quién puede acceder a este expediente y qué puede hacer +current_access: Acceso actual +grant_access: Conceder acceso +no_grantees: Nadie más tiene acceso a este expediente. +person_email: Dirección de correo electrónico +person_email_hint: Si no tiene una cuenta, será invitado a crear una. +person_name: Nombre +select_role: Selecciona un rol... +custom_role: Permisos personalizados +permissions: Permisos +op_read: Leer +op_write: Escribir +op_delete: Eliminar +op_manage: Gestionar +grant: Conceder acceso +revoke: Revocar +role_descriptions: Descripciones de roles +ops_legend: Leyenda de permisos +op_read_desc: Ver datos +op_write_desc: Agregar/editar datos +op_delete_desc: Eliminar datos +op_manage_desc: Gestionar quién tiene acceso +permissions_updated: Permisos actualizados exitosamente. +back: Volver +can_add_data: Puede agregar datos +install_title: Conectar a Claude +install_intro: Configura el puente de inou para que Claude analice tus datos de salud install_step1: "Paso 1: Descargar" -install_step1_desc: "Obtén el puente para tu plataforma" -install_download_intro: "Descarga el puente inou para tu sistema operativo:" +install_step1_desc: Obtén el puente para tu plataforma +install_download_intro: "Descarga el puente de inou para tu sistema operativo:" install_step2: "Paso 2: Configurar" -install_step2_desc: "Agregar a la configuración de Claude Desktop" +install_step2_desc: Agregar a la configuración de Claude Desktop install_config_intro: "Agrega esto a tu archivo de configuración de Claude Desktop:" install_step3: "Paso 3: Probar" -install_step3_desc: "Verificar la conexión" +install_step3_desc: Verifica la conexión install_test_intro: "Reinicia Claude Desktop y pregunta: 'Muéstrame mis perfiles de inou'" -nav_install: "Conectar con Claude" -nav_home: "Inicio" +nav_install: Conectar a Claude +nav_home: Inicio +pending: pendiente +rate_limit_exceeded: Demasiados intentos de registro desde tu ubicación. Por favor intenta de nuevo mañana. +section_genetics: Genética +no_genetics: Sin datos genéticos -# Status -pending: "pendiente" -rate_limit_exceeded: "Demasiados intentos de registro desde tu ubicación. Por favor, inténtalo mañana." - -# Sex display -sex_0: "desconocido" -sex_1: "masculino" -sex_2: "femenino" -sex_9: "otro" +sex_0: desconocido +sex_1: masculino +sex_2: femenino +sex_9: otro # Friend invite email -friend_invite_subject: "Mira esto — %s" -friend_invite_p1: "Estoy usando inou, la forma segura de guardar datos de salud y explorarlos con IA. Mantiene toda la información de salud de mi familia en un solo lugar — estudios de imagen, resultados de laboratorio, historiales médicos — y pensé que también te podría ser útil." -friend_invite_p2: "El verdadero poder está en poder usar IA para entenderlo todo: comprender qué significa realmente un informe, detectar tendencias a lo largo del tiempo, o simplemente hacer preguntas en lenguaje sencillo y obtener respuestas claras." -friend_invite_btn: "Descubre inou" -friend_invite_dear: "Querido/a %s," -rel_0: "tú" -rel_1: "Padre/Madre" -rel_2: "Hijo/a" -rel_3: "Cónyuge" -rel_4: "Hermano/a" -rel_5: "Tutor" -rel_6: "Cuidador" -rel_7: "Coach" -rel_8: "Médico" -rel_9: "Amigo" -rel_10: "Otro" -rel_98: "Otro" -rel_99: "Demo" -select_relation: "Seleccionar relación..." +friend_invite_subject: "Echa un vistazo a esto — %s" +friend_invite_p1: "He estado usando inou, la forma segura de almacenar datos de salud y explorarlos con IA. Mantiene toda la información de salud de mi familia en un solo lugar — estudios de imagen, resultados de laboratorio, registros médicos — y pensé que podría serte útil." +friend_invite_p2: "El verdadero poder está en poder usar IA para darle sentido a todo: entender lo que realmente significa un informe, detectar tendencias a lo largo del tiempo, o simplemente hacer preguntas en lenguaje cotidiano y obtener respuestas claras." +friend_invite_btn: Ver inou +friend_invite_dear: "Estimado/a %s," +rel_0: tú +rel_1: Padre/Madre +rel_2: Hijo/a +rel_3: Cónyuge +rel_4: Hermano/a +rel_5: Tutor +rel_6: Cuidador +rel_7: Entrenador +rel_8: Doctor/a +rel_9: Amigo/a +rel_10: Otro +rel_98: Otro +rel_99: Demo +select_relation: Selecciona relación... +audit_dossier_added: "Nuevo expediente para %s creado por %s" +audit_dossier_edited: "Expediente %s editado por %s" +audit_access_granted: "Acceso a %s concedido a %s" +audit_dossier_created: "Cuenta creada por %s" +audit_access_revoked: "Acceso de %s a %s revocado" +audit_file_upload: "Archivo %s subido por %s" +audit_file_delete: "Archivo %s eliminado por %s" +audit_file_category_change: "Categoría del archivo %s cambiada por %s" +audit_genome_import: "%s variantes genéticas importadas" -# Categorías -category000: Imagen médica +# Categories (category000 = imaging, etc.) +category000: Imagenología category001: Documento category002: Resultado de laboratorio category003: Genoma -category004: Carga +category004: Subida category005: Consulta category006: Diagnóstico -category007: Resultado de imagen -category008: Resultado de EEG +category007: Hallazgo de imagenología +category008: Hallazgo de EEG category009: Signo vital category010: Ejercicio category011: Medicamento @@ -209,33 +284,57 @@ category014: Fertilidad category015: Síntoma category016: Nota category017: Historial médico -category018: Antecedentes familiares +category018: Historial familiar category019: Cirugía category020: Hospitalización -category021: Datos de nacimiento +category021: Registro de nacimiento category022: Dispositivo médico category023: Terapia category024: Evaluación -category025: Proveedor de salud +category025: Proveedor category026: Pregunta # Genome -genome_english_only: "Toda la información genética está en inglés. Usa Claude para discutirla en español." -genome_variants: "variantes" -genome_hidden: "ocultas" +genome_english_only: "" +genome_variants: variantes +genome_hidden: oculto genome_show_all_categories: "Mostrar las %d categorías" # API -api_token: "API Token" -api_token_use: "[EN] Use this token to authenticate API requests:" -api_token_warning: "[EN] Keep this private. Anyone with this token can access your health data." -api_token_none: "[EN] Generate a token to access the API programmatically or connect AI assistants." -api_token_generate: "Generate Token" -api_token_regenerate: "Regenerate Token" -api_token_regenerate_confirm: "[EN] This will invalidate your current token. Any connected apps will need to be updated." -api_authentication: "Authentication" -api_auth_instructions: "[EN] Include your API token in the Authorization header:" -copy: "Copy" -relation: "Relación" -relation_to: "A" -me: "Yo" +api_token: Token de API +api_token_use: "Usa este token para autenticar solicitudes de API:" +api_token_warning: Mantén esto en privado. Cualquier persona con este token puede acceder a tus datos de salud. +api_token_none: Genera un token para acceder a la API programáticamente o conectar asistentes de IA. +api_token_generate: Generar token +api_token_regenerate: Regenerar token +api_token_regenerate_confirm: Esto invalidará tu token actual. Cualquier aplicación conectada deberá actualizarse. +api_authentication: Autenticación +api_auth_instructions: "Incluye tu token de API en el encabezado de Authorization:" +copy: Copiar +relation: Relación +relation_to: Con +me: Yo + +# Languages (native names — do not translate) +lang_da: Dansk +lang_de: Deutsch +lang_en: English +lang_es: Español +lang_fi: Suomi +lang_fr: Français +lang_hi: हिन्दी +lang_id: Bahasa Indonesia +lang_it: Italiano +lang_ja: 日本語 +lang_ko: 한국어 +lang_nl: Nederlands +lang_no: Norsk +lang_pl: Polski +lang_pt: Português +lang_ru: Русский +lang_sv: Svenska +lang_th: ไทย +lang_tr: Türkçe +lang_uk: Українська +lang_vi: Tiếng Việt +lang_zh: 中文 diff --git a/portal/lang/fi.yaml b/portal/lang/fi.yaml index 5287bde..0b95092 100644 --- a/portal/lang/fi.yaml +++ b/portal/lang/fi.yaml @@ -1,3 +1,5 @@ +language_name: Suomi + # Landing headline_1: "Sinun terveystietosi." headline_2: "Sinun tekoälysi." diff --git a/portal/lang/fr.yaml b/portal/lang/fr.yaml index f87b8d8..501dfc7 100644 --- a/portal/lang/fr.yaml +++ b/portal/lang/fr.yaml @@ -1,3 +1,5 @@ +language_name: Français + # Landing headline_1: "Vos données de santé." headline_2: "Votre IA." diff --git a/portal/lang/it.yaml b/portal/lang/it.yaml index 1c6228f..4bd707e 100644 --- a/portal/lang/it.yaml +++ b/portal/lang/it.yaml @@ -1,3 +1,5 @@ +language_name: Italiano + # Landing headline_1: "I tuoi dati sanitari." headline_2: "La tua IA." diff --git a/portal/lang/ja.yaml b/portal/lang/ja.yaml index e329271..c711b9c 100644 --- a/portal/lang/ja.yaml +++ b/portal/lang/ja.yaml @@ -1,3 +1,5 @@ +language_name: 日本語 + # Landing headline_1: "あなたの健康データ。" headline_2: "あなたのAI。" diff --git a/portal/lang/ko.yaml b/portal/lang/ko.yaml index 31c6ed2..4021b95 100644 --- a/portal/lang/ko.yaml +++ b/portal/lang/ko.yaml @@ -1,3 +1,5 @@ +language_name: 한국어 + # Landing headline_1: "당신의 건강 데이터." headline_2: "당신의 AI." diff --git a/portal/lang/nl.yaml b/portal/lang/nl.yaml index 5833592..eda1edb 100644 --- a/portal/lang/nl.yaml +++ b/portal/lang/nl.yaml @@ -1,27 +1,29 @@ +language_name: Nederlands + # Landing headline_1: "Jouw gezondheidsdata." headline_2: "Jouw AI." headline_3: "Jouw antwoorden." -intro: "Upload beeldvorming, labresultaten en meer. Verbind je AI om te begrijpen wat je ziet." +intro: "Upload beeldvorming, labresultaten en meer. Verbind je AI om te begrijpen waar je naar kijkt." email: "E-mail" get_started: "Aan de slag" -data_yours: "Jouw data blijft van jou" +data_yours: "Je data blijft van jou" never_training: "Nooit gebruikt voor training" never_training_desc: "Je beelden worden nooit gebruikt om AI-modellen te trainen." never_shared: "Nooit gedeeld" -never_shared_desc: "We delen je data nooit met anderen." -encrypted: "Versleutelde opslag" -encrypted_desc: "Alle data versleuteld opgeslagen." -delete: "Altijd verwijderen" +never_shared_desc: "We delen je data nooit met wie dan ook." +encrypted: "Militaire encryptie" +encrypted_desc: "In rust en onderweg. Je data reist nooit onbeschermd." +delete: "Verwijder wanneer je wilt" delete_desc: "Jouw data, jouw controle." # Verify -check_email: "Controleer je e-mail" +check_email: "Check je e-mail" code_sent_to: "We hebben een 6-cijferige code gestuurd naar" verification_code: "Verificatiecode" verify: "Verifiëren" -use_different_email: "Ander e-mailadres gebruiken" -invalid_code: "Ongeldige of verlopen code. Probeer opnieuw." +use_different_email: "Gebruik een ander e-mailadres" +invalid_code: "Ongeldige of verlopen code. Probeer het opnieuw." # Onboard create_dossier: "Maak je dossier aan" @@ -32,13 +34,13 @@ date_of_birth: "Geboortedatum" sex_at_birth: "Geslacht bij geboorte" female: "Vrouw" male: "Man" -create_my_dossier: "Mijn dossier aanmaken" +create_my_dossier: "Maak mijn dossier aan" # Minor error must_be_18: "Je moet 18 zijn om een account aan te maken" -minor_explanation: "Als je dit voor iemand anders instelt, begin dan eerst met je eigen profiel. Zo heb alleen jij toegang tot hun gezondheidsgegevens." +minor_explanation: "Als je dit voor iemand anders instelt, begin dan met je eigen profiel. Zo heb alleen jij toegang tot hun gezondheidsdata." minor_next_steps: "Na het aanmaken van je dossier kun je anderen toevoegen." -use_different_dob: "Andere geboortedatum gebruiken" +use_different_dob: "Gebruik een andere geboortedatum" # Minor login block minor_login_blocked: "Je moet 18 zijn om in te loggen" @@ -47,7 +49,7 @@ minor_ask_guardian_generic: "Vraag een ouder of voogd om toegang tot je dossier. # Dashboard dossiers: "Dossiers" -dossiers_intro: "Beheer de gezondheidsgegevens van jezelf of voor anderen" +dossiers_intro: "Beheer gezondheidsdata voor jezelf of anderen" you: "jij" view: "Bekijken" save: "Opslaan" @@ -61,25 +63,54 @@ logout: "Uitloggen" back_to_dossiers: "Terug naar dossiers" born: "Geboren" no_access_yet: "Alleen jij hebt toegang." -people_with_access: "Personen met toegang" +people_with_access: "Mensen met toegang" share_access: "Toegang delen" -can_edit: "kan gegevens toevoegen" +manage_permissions: "Rechten beheren" +can_edit: "kan data toevoegen" remove: "Verwijderen" confirm_revoke: "Toegang intrekken?" # Dossier sections -section_imaging: "Radiologie" +section_imaging: "Beeldvorming" section_labs: "Labresultaten" section_uploads: "Uploads" -section_vitals: "Vitale functies" +section_vitals: "Vitale waarden" section_medications: "Medicatie" section_records: "Dossiers" section_journal: "Dagboek" +section_checkin: "Dagelijkse check-in" +section_procedures: "Ingrepen" +section_assessments: "Beoordelingen" +section_genetics: "Genetica" +section_supplements: "Supplementen" +section_symptoms: "Symptomen" +section_hospitalizations: "Ziekenhuisopnames" +section_therapies: "Therapieën" +section_consultations: "Consulten" +section_diagnoses: "Diagnoses" +section_exercise: "Beweging" +section_nutrition: "Voeding" +section_fertility: "Vruchtbaarheid" +section_notes: "Notities" +section_history: "Medische geschiedenis" +section_family_history: "Familiegeschiedenis" +section_birth: "Geboorte" +section_devices: "Apparaten" +section_providers: "Zorgverleners" +section_questions: "Vragen" +section_privacy: "Privacy" -# Section summaries -# Plural forms -slice_one: "%d beeld" -slice_other: "%d beelden" +# Daily Check-in +checkin_summary: "Houd vitale waarden, medicatie en symptomen bij" +checkin_build_profile: "Voeg toe wat je wilt bijhouden" +btn_vitals: "Vitale waarden" +btn_medications: "Medicatie" +btn_supplements: "Supplementen" +btn_exercise: "Beweging" + +# Plural forms (use %d for count) +slice_one: "%d slice" +slice_other: "%d slices" series_one: "%d serie" series_other: "%d series" order_one: "%d aanvraag" @@ -87,11 +118,12 @@ order_other: "%d aanvragen" result_one: "%d resultaat" result_other: "%d resultaten" -imaging_summary: "%d onderzoeken · %d beelden" +# Section summaries +imaging_summary: "%d onderzoeken · %d slices" no_imaging: "Geen beeldvorming" no_lab_data: "Geen labresultaten" no_files: "Geen bestanden" -no_upload_access: "You don't have permission to upload" +no_upload_access: "Je hebt geen rechten om te uploaden" files_summary: "%d bestanden (%s)" series_count: "%d series" vitals_desc: "Bloeddruk, hartslag, SpO₂, gewicht, glucose" @@ -100,13 +132,14 @@ records_desc: "Klinische notities en medische dossiers" journal_desc: "Symptomen, pijn en observaties" # Buttons and actions +open: "Openen" open_viewer: "Viewer openen" manage: "Beheren" show_all_studies: "Toon alle %d onderzoeken..." coming_soon: "Binnenkort beschikbaar" # Upload page -upload_files: "Gezondheidsgegevens uploaden" +upload_files: "Gezondheidsdata uploaden" upload_files_intro: "Upload medische beeldvorming, labresultaten, genoombestanden of andere gezondheidsgerelateerde documenten." upload_hint_broad: "DICOM, PDF, CSV, VCF en meer" uploading: "Uploaden..." @@ -117,17 +150,17 @@ upload_drop: "Klik of sleep een map hierheen" upload_hint: "Alleen DICOM-mappen" # Add profile -add_dossier_intro: "Voeg iemand toe wiens gezondheidsgegevens je wilt beheren." +add_dossier_intro: "Voeg iemand toe van wie je de gezondheidsdata wilt beheren." email_optional: "E-mail (optioneel)" email_optional_hint: "Als ze 18+ zijn, kunnen ze zelf inloggen" -your_relation: "Jouw relatie met hen" -select_relation: "Selecteer..." +your_relation: "Jouw relatie tot deze persoon" +select_relation: "Selecteer relatie..." i_provide_care: "Ik zorg voor deze persoon" # Share access share_access_intro: "Nodig iemand uit voor toegang tot" -their_relation: "Hun relatie met deze persoon" -can_add_data: "Kan gegevens toevoegen (supplementen, notities, etc.)" +their_relation: "Hun relatie tot deze persoon" +can_add_data: "Kan data toevoegen" send_invitation: "Uitnodiging versturen" back_to_dossier: "Terug naar dossier" @@ -136,57 +169,85 @@ back_to_dossier: "Terug naar dossier" # Invitation email invite_email_subject: "%s heeft je toegevoegd aan inou" invite_email_body: "%s heeft je gezondheidsdossier toegevoegd aan inou zodat je je medische gegevens kunt bekijken en beheren." -invite_email_cta: "Inloggen om te bekijken" +invite_email_cta: "Log in om te bekijken" continue: "Doorgaan" i_am_their: "Ik ben hun..." # Simple relation names (for display) my_role: "mijn rol" -role: "role" +role: "rol" section_privacy: "Privacy" -people_with_access_count: "personen met toegang" -view_audit_log: "Bekijk auditlog" -export_data: "Download my data" +people_with_access_count: "mensen met toegang" +view_audit_log: "Activiteitenlog bekijken" +export_data: "Mijn data downloaden" relation_with: "Relatie met" -audit_log: "Auditlog" +audit_log: "Activiteitenlog" audit_log_intro: "Activiteitengeschiedenis voor" -audit_log_desc: "Bekijk wie dit dossier heeft bekeken of gewijzigd" -install_title: "Verbind met Claude" -install_intro: "Stel de inou-bridge in zodat Claude je gezondheidsgegevens kan analyseren" -install_step1: "Stap 1: Download" +audit_log_desc: "Bekijk wie dit dossier heeft geopend of gewijzigd" + +# Permissions (RBAC) +permissions_title: "Rechten" +permissions_subtitle: "Bepaal wie toegang heeft tot dit dossier en wat ze kunnen doen" +current_access: "Huidige toegang" +grant_access: "Toegang verlenen" +no_grantees: "Niemand anders heeft toegang tot dit dossier." +person_email: "E-mailadres" +person_email_hint: "Als ze nog geen account hebben, worden ze uitgenodigd er een aan te maken." +person_name: "Naam" +select_role: "Selecteer een rol..." +custom_role: "Aangepaste rechten" +permissions: "Rechten" +op_read: "Lezen" +op_write: "Schrijven" +op_delete: "Verwijderen" +op_manage: "Beheren" +grant: "Toegang verlenen" +revoke: "Intrekken" +role_descriptions: "Rolbeschrijvingen" +ops_legend: "Rechtenlegenda" +op_read_desc: "Data bekijken" +op_write_desc: "Data toevoegen/bewerken" +op_delete_desc: "Data verwijderen" +op_manage_desc: "Beheren wie toegang heeft" +permissions_updated: "Rechten succesvol bijgewerkt." +back: "Terug" +can_add_data: "Kan data toevoegen" +install_title: "Verbinden met Claude" +install_intro: "Stel de inou bridge in zodat Claude je gezondheidsdata kan analyseren" +install_step1: "Stap 1: Downloaden" install_step1_desc: "Download de bridge voor jouw platform" -install_download_intro: "Download de inou-bridge voor jouw besturingssysteem:" -install_step2: "Stap 2: Configureer" -install_step2_desc: "Voeg toe aan Claude Desktop configuratie" -install_config_intro: "Voeg dit toe aan je Claude Desktop configuratiebestand:" -install_step3: "Stap 3: Test" +install_download_intro: "Download de inou bridge voor jouw besturingssysteem:" +install_step2: "Stap 2: Configureren" +install_step2_desc: "Toevoegen aan Claude Desktop-configuratie" +install_config_intro: "Voeg dit toe aan je Claude Desktop-configuratiebestand:" +install_step3: "Stap 3: Testen" install_step3_desc: "Controleer de verbinding" install_test_intro: "Herstart Claude Desktop en vraag: 'Toon mijn inou profielen'" -nav_install: "Verbind met Claude" +nav_install: "Verbinden met Claude" nav_home: "Home" pending: "in afwachting" -rate_limit_exceeded: "Te veel aanmeldpogingen vanaf uw locatie. Probeer het morgen opnieuw." -section_genetics: Genetica -no_genetics: Geen genetische gegevens +rate_limit_exceeded: "Te veel aanmeldpogingen vanaf jouw locatie. Probeer het morgen opnieuw." +section_genetics: "Genetica" +no_genetics: "Geen genetische data" sex_0: "onbekend" -sex_1: "mannelijk" -sex_2: "vrouwelijk" +sex_1: "man" +sex_2: "vrouw" sex_9: "anders" # Friend invite email friend_invite_subject: "Kijk hier eens naar — %s" -friend_invite_p1: "Ik gebruik inou, de veilige manier om gezondheidsgegevens op te slaan en te verkennen met AI. Het houdt alle gezondheidsinformatie van mijn familie op één plek — beeldvorming, labresultaten, medische dossiers — en ik dacht dat jij het misschien ook handig zou vinden." -friend_invite_p2: "De echte kracht is dat je AI kunt gebruiken om alles te begrijpen: begrijpen wat een rapport echt betekent, trends in de tijd ontdekken, of gewoon vragen stellen in gewone taal en duidelijke antwoorden krijgen." +friend_invite_p1: "Ik gebruik inou, de veilige manier om gezondheidsdata op te slaan en te verkennen met AI. Het houdt alle gezondheidsinformatie van mijn gezin op één plek — beeldvorming, labresultaten, medische dossiers — en ik dacht dat jij er ook iets aan zou kunnen hebben." +friend_invite_p2: "De echte kracht zit in het gebruik van AI om er wijs uit te worden: begrijpen wat een rapport écht betekent, trends over tijd herkennen, of gewoon vragen stellen in normale taal en duidelijke antwoorden krijgen." friend_invite_btn: "Bekijk inou" friend_invite_dear: "Beste %s," rel_0: "jij" rel_1: "Ouder" rel_2: "Kind" rel_3: "Partner" -rel_4: "Broer/Zus" +rel_4: "Broer/zus" rel_5: "Voogd" -rel_6: "Verzorger" +rel_6: "Mantelzorger" rel_7: "Coach" rel_8: "Arts" rel_9: "Vriend" @@ -194,62 +255,62 @@ rel_10: "Anders" rel_98: "Anders" rel_99: "Demo" select_relation: "Selecteer relatie..." -audit_dossier_added: "Nieuw dossier voor %s aangemaakt door %s" +audit_dossier_added: "Een nieuw dossier voor %s aangemaakt door %s" audit_dossier_edited: "Dossier %s bewerkt door %s" audit_access_granted: "Toegang tot %s verleend aan %s" -audit_dossier_created: Account aangemaakt door %s -audit_access_revoked: Toegang voor %s tot %s ingetrokken -audit_file_upload: Bestand %s geüpload door %s -audit_file_delete: Bestand %s verwijderd door %s -audit_file_category_change: Bestandscategorie %s gewijzigd door %s -audit_genome_import: %s genetische varianten geïmporteerd +audit_dossier_created: "Account aangemaakt door %s" +audit_access_revoked: "Toegang van %s tot %s ingetrokken" +audit_file_upload: "Bestand %s geüpload door %s" +audit_file_delete: "Bestand %s verwijderd door %s" +audit_file_category_change: "Categorie van bestand %s gewijzigd door %s" +audit_genome_import: "%s genetische varianten geïmporteerd" -# Categorieën -category000: Beeldvorming -category001: Document -category002: Labuitslag -category003: Genoom -category004: Upload -category005: Consult -category006: Diagnose -category007: Beeldvormingsresultaat -category008: EEG-resultaat -category009: Vitale waarde -category010: Beweging -category011: Medicatie -category012: Supplement -category013: Voeding -category014: Vruchtbaarheid -category015: Symptoom -category016: Notitie -category017: Medische geschiedenis -category018: Familiegeschiedenis -category019: Operatie -category020: Ziekenhuisopname -category021: Geboortegegevens -category022: Medisch hulpmiddel -category023: Therapie -category024: Beoordeling -category025: Zorgverlener -category026: Vraag +# Categories (category000 = imaging, etc.) +category000: "Beeldvorming" +category001: "Document" +category002: "Labresultaat" +category003: "Genoom" +category004: "Upload" +category005: "Consult" +category006: "Diagnose" +category007: "Beeldvormingsbevinding" +category008: "EEG-bevinding" +category009: "Vitale waarde" +category010: "Beweging" +category011: "Medicatie" +category012: "Supplement" +category013: "Voeding" +category014: "Vruchtbaarheid" +category015: "Symptoom" +category016: "Notitie" +category017: "Medische geschiedenis" +category018: "Familiegeschiedenis" +category019: "Operatie" +category020: "Ziekenhuisopname" +category021: "Geboorteakte" +category022: "Medisch hulpmiddel" +category023: "Therapie" +category024: "Beoordeling" +category025: "Zorgverlener" +category026: "Vraag" # Genome -genome_english_only: "Alle genetische informatie is in het Engels. Gebruik Claude om het in het Nederlands te bespreken." +genome_english_only: "" genome_variants: "varianten" genome_hidden: "verborgen" genome_show_all_categories: "Toon alle %d categorieën" # API -api_token: "API Token" -api_token_use: "[EN] Use this token to authenticate API requests:" -api_token_warning: "[EN] Keep this private. Anyone with this token can access your health data." -api_token_none: "[EN] Generate a token to access the API programmatically or connect AI assistants." -api_token_generate: "Generate Token" -api_token_regenerate: "Regenerate Token" -api_token_regenerate_confirm: "[EN] This will invalidate your current token. Any connected apps will need to be updated." -api_authentication: "Authentication" -api_auth_instructions: "[EN] Include your API token in the Authorization header:" -copy: "Copy" +api_token: "API-token" +api_token_use: "Gebruik dit token om API-verzoeken te authenticeren:" +api_token_warning: "Houd dit privé. Iedereen met dit token heeft toegang tot je gezondheidsdata." +api_token_none: "Genereer een token om programmatisch toegang te krijgen tot de API of AI-assistenten te verbinden." +api_token_generate: "Token genereren" +api_token_regenerate: "Token opnieuw genereren" +api_token_regenerate_confirm: "Dit maakt je huidige token ongeldig. Verbonden apps moeten worden bijgewerkt." +api_authentication: "Authenticatie" +api_auth_instructions: "Voeg je API-token toe in de Authorization-header:" +copy: "Kopiëren" relation: "Relatie" relation_to: "Aan" me: "Ik" diff --git a/portal/lang/no.yaml b/portal/lang/no.yaml index 74a09cc..3c9ea27 100644 --- a/portal/lang/no.yaml +++ b/portal/lang/no.yaml @@ -1,3 +1,5 @@ +language_name: Norsk + # Landing headline_1: "Dine helsedata." headline_2: "Din AI." diff --git a/portal/lang/pt.yaml b/portal/lang/pt.yaml index 7786604..e19b8f0 100644 --- a/portal/lang/pt.yaml +++ b/portal/lang/pt.yaml @@ -1,3 +1,5 @@ +language_name: Português + # Landing headline_1: "Seus dados de saúde." headline_2: "Sua IA." diff --git a/portal/lang/ru.yaml b/portal/lang/ru.yaml index eed3cdb..c910387 100644 --- a/portal/lang/ru.yaml +++ b/portal/lang/ru.yaml @@ -1,3 +1,5 @@ +language_name: Русский + # Landing headline_1: "Ваши медицинские данные." headline_2: "Ваш ИИ." diff --git a/portal/lang/sv.yaml b/portal/lang/sv.yaml index de4c482..e20a144 100644 --- a/portal/lang/sv.yaml +++ b/portal/lang/sv.yaml @@ -1,3 +1,5 @@ +language_name: Svenska + # Landing headline_1: "Din hälsodata." headline_2: "Din AI." diff --git a/portal/lang/tr.yaml b/portal/lang/tr.yaml new file mode 100644 index 0000000..59b003a --- /dev/null +++ b/portal/lang/tr.yaml @@ -0,0 +1,316 @@ +language_name: Türkçe + +# Landing +headline_1: Sağlık verilerin. +headline_2: "AI'ın." +headline_3: Cevapların. +intro: "Görüntüleme, laboratuvarlar ve daha fazlasını yükle. Ne baktığını anlamana yardımcı olması için AI'ını bağla." +email: E-posta +get_started: Başla +data_yours: Verilerin senin +never_training: Asla eğitim için kullanılmadı +never_training_desc: Görüntülerin asla AI modellerini eğitmek için kullanılmaz. +never_shared: Asla paylaşılmadı +never_shared_desc: Verilerini asla kimseyle paylaşmayız. +encrypted: Askeri düzey şifreleme +encrypted_desc: Hem durağan halde hem aktarımda. Verilerin asla korumasız seyahat etmez. +delete: İstediğin zaman sil +delete_desc: Verilerin, senin kontrolün. + +# Verify +check_email: E-postanı kontrol et +code_sent_to: "6 haneli kodu gönderdik:" +verification_code: Doğrulama kodu +verify: Doğrula +use_different_email: Farklı bir e-posta kullan +invalid_code: Geçersiz veya süresi dolmuş kod. Lütfen tekrar dene. + +# Onboard +create_dossier: Dosyanı oluştur +create_profile_intro: Başlamak için kendin hakkında bilgi ver. +name: İsim +name_placeholder: İsmin +date_of_birth: Doğum tarihi +sex_at_birth: Doğumdaki cinsiyet +female: Kadın +male: Erkek +create_my_dossier: Dosyamı oluştur + +# Minor error +must_be_18: Hesap oluşturmak için 18 yaşında olmalısın +minor_explanation: Başkası için bunu kuruyorsan, önce kendi profilinle başla. Bu, yalnızca senin onların sağlık verilerine erişebildiğinden emin olur. +minor_next_steps: Dosyanı oluşturduktan sonra başkalarını ekleyebilirsin. +use_different_dob: Farklı bir doğum tarihi kullan + +# Minor login block +minor_login_blocked: Giriş yapmak için 18 yaşında olmalısın +minor_ask_guardian: "Dosyana erişmek için %s'e sor." +minor_ask_guardian_generic: Dosyana erişmek için bir ebeveyne veya veliye sor. + +# Dashboard +dossiers: Dosyalar +dossiers_intro: Kendin veya başkaları için sağlık verilerini yönet +you: sen +view: Görüntüle +save: Kaydet +cancel: İptal +add_dossier: Dosya ekle +edit_dossier: Dosyayı düzenle +care: bakım +logout: Çıkış yap + +# Profile detail +back_to_dossiers: Dosyalara geri dön +born: Doğumlu +no_access_yet: Sadece sen erişebilirsin. +people_with_access: Erişimi olanlar +share_access: Erişimi paylaş +manage_permissions: İzinleri yönet +can_edit: veri ekleyebilir +remove: Kaldır +confirm_revoke: "Erişimi kaldır?" + +# Dossier sections +section_imaging: Görüntüleme +section_labs: Laboratuvarlar +section_uploads: Yüklemeler +section_vitals: Vitals +section_medications: İlaçlar +section_records: Kayıtlar +section_journal: Günlük +section_checkin: Günlük Kontrol +section_procedures: Prosedürler +section_assessments: "Assessments" +section_genetics: Genetik +section_supplements: Takviyeler +section_symptoms: Belirtiler +section_hospitalizations: Hastaneye Yatışlar +section_therapies: Terapiler +section_consultations: Konsültasyonlar +section_diagnoses: Tanılar +section_exercise: Egzersiz +section_nutrition: Beslenme +section_fertility: Doğurganlık +section_notes: Notlar +section_history: Tıbbi Geçmiş +section_family_history: Aile Öyküsü +section_birth: Doğum +section_devices: Cihazlar +section_providers: Sağlık Sağlayıcıları +section_questions: Sorular +section_privacy: Gizlilik + +# Daily Check-in +checkin_summary: Vitals, ilaçlar, belirtiler takip et +checkin_build_profile: Takip etmek istediğin şeyleri ekle +btn_vitals: Vitals +btn_medications: İlaçlar +btn_supplements: Takviyeler +btn_exercise: Egzersiz + +# Plural forms (use %d for count) +slice_one: "%d dilim" +slice_other: "%d dilim" +series_one: "%d seri" +series_other: "%d seri" +order_one: "%d sipariş" +order_other: "%d sipariş" +result_one: "%d sonuç" +result_other: "%d sonuç" + +# Section summaries +imaging_summary: "%d çalışma · %d dilim" +no_imaging: Görüntüleme verisi yok +no_lab_data: Laboratuvar verisi yok +no_files: Dosya yok +no_upload_access: Yükleme iznin yok +files_summary: "%d dosya (%s)" +series_count: "%d seriler" +vitals_desc: Tansiyon, kalp atışı, SpO₂, kilo, glukoz +medications_desc: Reçeteler ve takviyeler +records_desc: Klinik notlar ve tıbbi kayıtlar +journal_desc: Belirtiler, ağrı ve gözlemler + +# Buttons and actions +open: Aç +open_viewer: Görüntüleyiciyi aç +manage: Yönet +show_all_studies: "Tüm %d çalışmaları göster..." +coming_soon: Çok yakında + +# Upload page +upload_files: Sağlık verileri yükle +upload_files_intro: Tıbbi görüntüleme, laboratuvar sonuçları, genom dosyaları veya sağlıkla ilgili herhangi bir belge yükle. +upload_hint_broad: DICOM, PDF, CSV, VCF ve daha fazlası +uploading: Yükleniyor... +files_uploaded: dosya yüklendi +upload_scans: Taramaları yükle +upload_scans_intro: Görüntüleme çalışmanızdan DICOM dosyaları içeren bir klasör yükleyin. +upload_drop: Bir klasörü buraya tıkla veya sürükle +upload_hint: Sadece DICOM klasörleri + +# Add profile +add_dossier_intro: Sağlık verilerini yönetmek istediğiniz birini ekleyin. +email_optional: E-posta (isteğe bağlı) +email_optional_hint: 18 yaşındalarsa, kendileri giriş yapabilir +your_relation: Onlarla ilişkin +select_relation: İlişki seç... +i_provide_care: Bu kişiye bakım sağlıyorum + +# Share access +share_access_intro: Erişim için birini davet et +their_relation: Bu kişiyle ilişkileri +can_add_data: Veri ekleyebilir +send_invitation: Davet gönder +back_to_dossier: Dosyaya geri dön + +# Relations + +# Invitation email +invite_email_subject: "%s seni inou'ya ekledi" +invite_email_body: "%s sağlık dosyanı inou'ya ekledi, böylece tıbbi verilerini görüntüleyebilir ve yönetebilirsin." +invite_email_cta: Görüntülemek için giriş yap +continue: Devam et +i_am_their: Ben onun... + +# Simple relation names (for display) +my_role: rolüm +role: rol +section_privacy: Gizlilik +people_with_access_count: kişi erişimli +view_audit_log: Denetim günlüğünü görüntüle +export_data: Verilerimi indir +relation_with: İlişki +audit_log: Denetim günlüğü +audit_log_intro: "Etkinlik geçmişi:" +audit_log_desc: Bu dosyaya kimlerin eriştiğini veya değişiklik yaptığını takip edin + +# Permissions (RBAC) +permissions_title: İzinler +permissions_subtitle: Bu dosyaya kimlerin erişebileceğini ve ne yapabileceklerini kontrol et +current_access: Mevcut erişim +grant_access: Erişim ver +no_grantees: Başka kimsenin bu dosyaya erişimi yok. +person_email: E-posta adresi +person_email_hint: Hesapları yoksa, oluşturmaya davet edilecekler. +person_name: İsim +select_role: Rol seç... +custom_role: Özel izinler +permissions: İzinler +op_read: Oku +op_write: Yaz +op_delete: Sil +op_manage: Yönet +grant: Erişim ver +revoke: İptal et +role_descriptions: Rol açıklamaları +ops_legend: İzin açıklamaları +op_read_desc: Verileri görüntüle +op_write_desc: Veri ekle/düzenle +op_delete_desc: Verileri kaldır +op_manage_desc: Kimin erişimi olduğunu yönet +permissions_updated: İzinler başarıyla güncellendi. +back: Geri +can_add_data: Veri ekleyebilir +install_title: "Claude'a Bağlan" +install_intro: "Claude'un sağlık verilerini analiz etmesi için inou bridge'i kur" +install_step1: "Adım 1: İndir" +install_step1_desc: "Platformun için bridge'i al" +install_download_intro: "İşletim sistemin için inou bridge'i indir:" +install_step2: "Adım 2: Yapılandır" +install_step2_desc: "Claude Desktop config'e ekle" +install_config_intro: "Claude Desktop yapılandırma dosyana bunu ekle:" +install_step3: "Adım 3: Test" +install_step3_desc: Bağlantıyı doğrula +install_test_intro: "Claude Desktop'u yeniden başlat ve sor: 'inou profillerimi göster'" +nav_install: "Claude'a Bağlan" +nav_home: Ana Sayfa +pending: beklemede +rate_limit_exceeded: Konumundan çok fazla kayıt denemesi. Lütfen yarın tekrar dene. +section_genetics: Genetik +no_genetics: Genetik veri yok + +sex_0: bilinmiyor +sex_1: erkek +sex_2: kadın +sex_9: diğer + +# Friend invite email +friend_invite_subject: "Bunu dene — %s" +friend_invite_p1: "inou'yu kullanıyorum, sağlık verilerini güvenli bir şekilde depolamak ve AI ile keşfetmek için. Tüm ailemin sağlık bilgilerini tek bir yerde tutuyorum — görüntüleme çalışmaları, laboratuvar sonuçları, tıbbi kayıtlar — ve sana da faydalı olabileceğini düşündüm." +friend_invite_p2: "Gerçek güç, hepsini anlamlandırmak için AI kullanabilmek: bir raporun ne anlama geldiğini anlamak, zaman içinde eğilimleri tespit etmek veya sadece sade bir dilde sorular sormak ve net yanıtlar almak." +friend_invite_btn: "inou'yu dene" +friend_invite_dear: "Sevgili %s," +rel_0: sen +rel_1: Ebeveyn +rel_2: Çocuk +rel_3: Eş +rel_4: Kardeş +rel_5: Veli +rel_6: Bakıcı +rel_7: Koç +rel_8: Doktor +rel_9: Arkadaş +rel_10: Diğer +rel_98: Diğer +rel_99: Demo +select_relation: İlişki seç... +audit_dossier_added: "%s için %s tarafından yeni dosya oluşturuldu" +audit_dossier_edited: "%s dosyası %s tarafından düzenlendi" +audit_access_granted: "%s için %s erişimi verildi" +audit_dossier_created: "%s tarafından hesap oluşturuldu" +audit_access_revoked: "%s için %s erişimi iptal edildi" +audit_file_upload: "%s dosyası %s tarafından yüklendi" +audit_file_delete: "%s dosyası %s tarafından silindi" +audit_file_category_change: "%s dosyasının kategorisi %s tarafından değiştirildi" +audit_genome_import: "%s genetik varyant içe aktarıldı" + +# Categories (category000 = imaging, etc.) +category000: Görüntüleme +category001: Belge +category002: Laboratuvar sonucu +category003: Genom +category004: Yükleme +category005: Konsültasyon +category006: Tanı +category007: Görüntüleme bulgusu +category008: EEG bulgusu +category009: Vital bulgu +category010: Egzersiz +category011: İlaç +category012: Takviye +category013: Beslenme +category014: Doğurganlık +category015: Belirti +category016: Not +category017: Tıbbi geçmiş +category018: Aile öyküsü +category019: Ameliyat +category020: Hastaneye yatış +category021: Doğum kaydı +category022: Tıbbi cihaz +category023: Terapi +category024: Değerlendirme +category025: Sağlık sağlayıcı +category026: Soru + +# Genome +genome_english_only: "" +genome_variants: varyant +genome_hidden: gizli +genome_show_all_categories: "Tüm %d kategoriyi göster" + +# API +api_token: API Token +api_token_use: "API isteklerini kimlik doğrulamak için bu token'i kullanın:" +api_token_warning: "Bu özel tutun. Bu token'e sahip olan herkes sağlık verilerinize erişebilir." +api_token_none: "API'ye programatik olarak erişmek veya AI asistanları bağlamak için bir token oluşturun." +api_token_generate: Token Oluştur +api_token_regenerate: "Token'i Yeniden Oluştur" +api_token_regenerate_confirm: Bu, mevcut tokeninizi geçersiz kılacaktır. Bağlı tüm uygulamalar güncellenmelidir. +api_authentication: Kimlik doğrulama +api_auth_instructions: "API tokeninizi Authorization header'a ekleyin:" +copy: Kopyala +relation: İlişki +relation_to: İlişki +me: Ben diff --git a/portal/lang/zh.yaml b/portal/lang/zh.yaml index ddd061b..6b2e169 100644 --- a/portal/lang/zh.yaml +++ b/portal/lang/zh.yaml @@ -1,3 +1,5 @@ +language_name: 中文 + # Landing headline_1: "你的健康数据。" headline_2: "你的AI。" diff --git a/portal/main.go b/portal/main.go index efbdbf9..15a5ce3 100644 --- a/portal/main.go +++ b/portal/main.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "bytes" "crypto/rand" "crypto/sha256" "crypto/tls" @@ -144,7 +145,6 @@ type PageData struct { HasLabs, HasGenome, Embed bool StudyCount, LabCount, TotalSlices int AuditList []AuditViewEntry - SelfStats DossierStats APIToken string TempToken string TempTokenExpires string @@ -164,6 +164,16 @@ type PageData struct { Languages []LangOption RelationTargets []RelationTarget RelationTo string + // OAuth consent + ClientName string + ClientID string + RedirectURI string + ResponseType string + State string + CodeChallenge string + CodeChallengeMethod string + UserName string + Content template.HTML } type CategoryAccess struct { @@ -194,12 +204,6 @@ func initDB() { } // Native names for languages (used in language selector dropdowns). -var langNativeNames = map[string]string{ - "da": "Dansk", "de": "Deutsch", "en": "English", "es": "Español", - "fi": "Suomi", "fr": "Français", "it": "Italiano", "ja": "日本語", - "ko": "한국어", "nl": "Nederlands", "no": "Norsk", "pt": "Português", - "ru": "Русский", "sv": "Svenska", "zh": "中文", -} func loadTranslations() { translations = make(map[string]map[string]string) @@ -218,25 +222,29 @@ func loadTranslations() { } file.Close() } - // Build sorted language options from loaded translations - codes := make([]string, 0, len(translations)) - for code := range translations { codes = append(codes, code) } - sort.Strings(codes) - langOptions = make([]LangOption, 0, len(codes)) - for _, code := range codes { - name := langNativeNames[code] - if name == "" { name = code } - flag := "" - // Reuse the same flag mapping as langFlag template func + // Build language options from lang_* keys in en.yaml, sorted by native name + en := translations["en"] + langOptions = nil + for k, name := range en { + if !strings.HasPrefix(k, "lang_") { continue } + code := strings.TrimPrefix(k, "lang_") + langOptions = append(langOptions, LangOption{Code: code, Name: name}) + } + sort.Slice(langOptions, func(i, j int) bool { return langOptions[i].Name < langOptions[j].Name }) + // Add flags + for i := range langOptions { + code := langOptions[i].Code flags := map[string]string{ "en": "\U0001F1EC\U0001F1E7", "nl": "\U0001F1F3\U0001F1F1", "de": "\U0001F1E9\U0001F1EA", "ru": "\U0001F1F7\U0001F1FA", "zh": "\U0001F1E8\U0001F1F3", "ja": "\U0001F1EF\U0001F1F5", "ko": "\U0001F1F0\U0001F1F7", "fr": "\U0001F1EB\U0001F1F7", "es": "\U0001F1EA\U0001F1F8", "pt": "\U0001F1E7\U0001F1F7", "it": "\U0001F1EE\U0001F1F9", "sv": "\U0001F1F8\U0001F1EA", "no": "\U0001F1F3\U0001F1F4", "da": "\U0001F1E9\U0001F1F0", "fi": "\U0001F1EB\U0001F1EE", + "tr": "\U0001F1F9\U0001F1F7", "vi": "\U0001F1FB\U0001F1F3", "id": "\U0001F1EE\U0001F1E9", + "hi": "\U0001F1EE\U0001F1F3", "th": "\U0001F1F9\U0001F1ED", "pl": "\U0001F1F5\U0001F1F1", + "uk": "\U0001F1FA\U0001F1E6", } - if f, ok := flags[code]; ok { flag = f } - langOptions = append(langOptions, LangOption{Code: code, Name: name, Flag: flag}) + if f, ok := flags[code]; ok { langOptions[i].Flag = f } } } @@ -588,6 +596,23 @@ func render(w http.ResponseWriter, r *http.Request, data PageData) { data.T = translations[data.Lang] if data.T == nil { data.T = translations["en"] } data.RequestPath = r.URL.Path + if data.Languages == nil { data.Languages = langOptions } + // Pre-render page content — use localized template if available + page := data.Page + if data.Lang != "en" { + if templates.Lookup(data.Page + "_" + data.Lang) != nil { + page = data.Page + "_" + data.Lang + } + } + if t := templates.Lookup(page); t != nil { + var buf bytes.Buffer + if err := t.Execute(&buf, data); err != nil { + fmt.Fprintf(os.Stderr, "Page template %q error: %v\n", data.Page, err) + http.Error(w, "Template error", 500) + return + } + data.Content = template.HTML(buf.String()) + } if err := templates.ExecuteTemplate(w, "base.tmpl", data); err != nil { fmt.Fprintf(os.Stderr, "Template error: %v\n", err) http.Error(w, "Template error", 500) @@ -599,9 +624,7 @@ func handleLanding(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r); return } p := getLoggedInDossier(r) lang := getLang(r) - pageName := "landing" - switch lang { case "nl", "ru", "de", "fr", "es", "pt", "it", "sv", "no", "da", "fi", "ja", "ko", "zh": pageName = "landing_" + lang } - render(w, r, PageData{Page: pageName, Lang: lang, Dossier: p}) + render(w, r, PageData{Page: "landing", Lang: lang, Dossier: p}) } func getClientIP(r *http.Request) string { @@ -770,6 +793,11 @@ func handlePrivacy(w http.ResponseWriter, r *http.Request) { render(w, r, PageData{Page: "privacy", Lang: getLang(r), Dossier: p}) } +func handleDocs(w http.ResponseWriter, r *http.Request) { + p := getLoggedInDossier(r) + render(w, r, PageData{Page: "docs", Lang: getLang(r), Dossier: p}) +} + func handlePricing(w http.ResponseWriter, r *http.Request) { p := getLoggedInDossier(r) render(w, r, PageData{Page: "pricing", Lang: getLang(r), Dossier: p}) @@ -965,7 +993,7 @@ func getDossierStats(dossierID string) DossierStats { if cj == 0 { cj = 1 } return ci > cj }) - if len(all) > 5 { + if len(all) > 6 { stats.OverflowCount = len(all) - 5 all = all[:5] } @@ -979,8 +1007,6 @@ func handleDashboard(w http.ResponseWriter, r *http.Request) { if p.Name == "" { http.Redirect(w, r, "/onboard", http.StatusSeeOther); return } lang := getLang(r) - selfStats := getDossierStats(p.DossierID) - // All cat-0 entries I can access (self + granted) — RBAC checked allDossiers, _ := lib.EntryRead(p.DossierID, "", &lib.Filter{Category: 0}) // Access grants for relation/ops metadata @@ -988,8 +1014,14 @@ func handleDashboard(w http.ResponseWriter, r *http.Request) { grantMap := map[string]*lib.Access{} for _, g := range grants { grantMap[g.DossierID] = g } - // Build accessible dossier list with names index + // Build accessible dossier list — self first, then others nameMap := map[string]string{} // dossierID → name + self := AccessEntry{ + DossierID: p.DossierID, Name: p.Name, DateOfBirth: p.DateOfBirth, + Sex: p.Sex, Lang: p.Preferences.Language, + Relation: T(lang, "you"), CanEdit: true, IsSelf: true, + Stats: getDossierStats(p.DossierID), + } var accessible []AccessEntry for _, entry := range allDossiers { if entry.DossierID == p.DossierID { continue } @@ -1098,7 +1130,8 @@ func handleDashboard(w http.ResponseWriter, r *http.Request) { prevTier, prevGroup = t, g } - render(w, r, PageData{Page: "dashboard", Lang: lang, Embed: isEmbed(r), Dossier: p, AccessibleDossiers: accessible, SelfStats: selfStats}) + accessible = append([]AccessEntry{self}, accessible...) + render(w, r, PageData{Page: "dashboard", Lang: lang, Embed: isEmbed(r), Dossier: p, AccessibleDossiers: accessible}) } func handleDemo(w http.ResponseWriter, r *http.Request) { @@ -2151,6 +2184,7 @@ func setupMux() http.Handler { mux.HandleFunc("/invite", handleInvite) mux.HandleFunc("/privacy-policy", handlePrivacy) mux.HandleFunc("/privacy-policy/", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/privacy-policy", http.StatusMovedPermanently) }) + mux.HandleFunc("/docs", handleDocs) mux.HandleFunc("/pricing", handlePricing) mux.HandleFunc("/faq", handleFAQ) mux.HandleFunc("/security", handleSecurity) diff --git a/portal/templates/base.tmpl b/portal/templates/base.tmpl index 2cc4989..dfe7001 100644 --- a/portal/templates/base.tmpl +++ b/portal/templates/base.tmpl @@ -52,68 +52,16 @@
{{.Lang}}
- English - Nederlands - Deutsch - Français - Español - Português - Italiano - Русский - Svenska - Norsk - Dansk - Suomi - 日本語 - 한국어 - 中文 + {{range .Languages}}{{if eq $.Lang .Code}}{{.Name}} + {{end}}{{end}}{{range .Languages}}{{if ne $.Lang .Code}}{{.Name}} + {{end}}{{end}}
{{end}} - {{if eq .Page "landing"}}{{template "landing" .}} - {{else if eq .Page "landing_nl"}}{{template "landing_nl" .}} - {{else if eq .Page "landing_ru"}}{{template "landing_ru" .}} - {{else if eq .Page "landing_de"}}{{template "landing_de" .}} - {{else if eq .Page "landing_fr"}}{{template "landing_fr" .}} - {{else if eq .Page "landing_es"}}{{template "landing_es" .}} - {{else if eq .Page "landing_pt"}}{{template "landing_pt" .}} - {{else if eq .Page "landing_it"}}{{template "landing_it" .}} - {{else if eq .Page "landing_sv"}}{{template "landing_sv" .}} - {{else if eq .Page "landing_no"}}{{template "landing_no" .}} - {{else if eq .Page "landing_da"}}{{template "landing_da" .}} - {{else if eq .Page "landing_fi"}}{{template "landing_fi" .}} - {{else if eq .Page "landing_ja"}}{{template "landing_ja" .}} - {{else if eq .Page "landing_ko"}}{{template "landing_ko" .}} - {{else if eq .Page "landing_zh"}}{{template "landing_zh" .}} - {{else if eq .Page "verify"}}{{template "verify" .}} - {{else if eq .Page "onboard"}}{{template "onboard" .}} - {{else if eq .Page "minor_error"}}{{template "minor_error" .}} - {{else if eq .Page "dashboard"}}{{template "dashboard" .}} - {{else if eq .Page "dossier"}}{{template "dossier" .}} - {{else if eq .Page "add_dossier"}}{{template "add_dossier" .}} - {{else if eq .Page "share"}}{{template "share" .}} - {{else if eq .Page "upload"}}{{template "upload" .}} - {{else if eq .Page "audit"}}{{template "audit" .}} - {{else if eq .Page "connect"}}{{template "connect" .}} - {{else if eq .Page "connect_nl"}}{{template "connect_nl" .}} - {{else if eq .Page "connect_ru"}}{{template "connect_ru" .}} - {{else if eq .Page "invite"}}{{template "invite" .}} - {{else if eq .Page "login"}}{{template "login" .}} - {{else if eq .Page "privacy"}}{{template "privacy" .}} - {{else if eq .Page "security"}}{{template "security" .}} - {{else if eq .Page "dpa"}}{{template "dpa" .}} - {{else if eq .Page "terms"}}{{template "terms" .}} - {{else if eq .Page "styleguide"}}{{template "styleguide" .}} - {{else if eq .Page "pricing"}}{{template "pricing" .}} - {{else if eq .Page "faq"}}{{template "faq" .}} - {{else if eq .Page "trackers"}}{{template "trackers" .}} - {{else if eq .Page "permissions"}}{{template "permissions" .}} - {{else if eq .Page "edit_access"}}{{template "edit_access" .}} - {{else if eq .Page "edit_rbac"}}{{template "edit_rbac" .}} - {{end}} + {{.Content}} + +
+
+
+

Häufig gestellte Fragen

+

Alles, was du über die Gesundheit von inou wissen musst

+
+
+ + +
+
+
+
+ Preise & Pläne + 7 Fragen +
+
+
+ +
+
+

Monitor (Free)

+
    +
  • Vitalwerte, Periode/Fertilität, Bewegung, Symptome und Ernährung verfolgen
  • +
  • Text- und Spracherfassung
  • +
  • Bis zu 4 Dossiers (Familienmitglieder)
  • +
  • 100 MB Speicher
  • +
  • MCP-Integration mit begrenzten KI‑Einblicken
  • +
  • Perfekt für grundlegendes Gesundheits‑Tracking
  • +
+

Optimize ($12/Monat oder $120/Jahr)

+
    +
  • Alles in Monitor, plus:
  • +
  • Foto‑Uploads mit OCR
  • +
  • Supplement‑ und Medikamenten‑Tracking
  • +
  • Familiengeschichte
  • +
  • Labordaten‑Tracking
  • +
  • Verbraucher‑Genom‑Analyse (~160 kuratierte Varianten zu Pharmakogenomik, Krankheitsrisiken, Methylierung, sportlicher Leistung, Ernährung, Persönlichkeits‑ und physischen Merkmalen)
  • +
  • Vollständige KI‑Einblicke, Trend‑Analyse, Vorhersagen und Gesundheits‑Korrelationen
  • +
  • 1 GB Speicher
  • +
  • Bis zu 4 Dossiers
  • +
+

Research ($35/Monat oder $350/Jahr)

+
    +
  • Alles in Optimize, plus:
  • +
  • Medizinische Bildgebung (MRI, CT, Röntgen)
  • +
  • Komplette Genom‑Analyse (alle 5 000+ Varianten von SNPedia)
  • +
  • Unterstützung für klinische Genom‑Sequenzierung
  • +
  • Alle genetischen Varianten durchsuchen und anzeigen
  • +
  • 100 GB Speicher (Bilddateien sind groß)
  • +
  • Bis zu 4 Dossiers
  • +
+
+
+ + +
+
+

Jahrespläne kosten 10 Monate – du bekommst 2 Monate gratis:

+
    +
  • Optimize: $120/Jahr statt $144 (sparst $24)
  • +
  • Research: $350/Jahr statt $420 (sparst $70)
  • +
+
+
+ + +
+
+

inou befindet sich in aktiver Entwicklung. Wenn du dich jetzt anmeldest:

+
    +
  • Keine Kosten bis 1. Juli 2026 – nutze jede kostenpflichtige Stufe komplett kostenlos
  • +
  • Kein automatisches Verlängern am 1. Juli 2026 – wir fragen, ob du weitermachen möchtest
  • +
  • Keine Kreditkarte nötig während der Early‑Access‑Phase – einfach anmelden und nutzen
  • +
  • Entscheide dich danach, ob du nach dem 1. Juli einen kostenpflichtigen Plan fortsetzen oder beim kostenlosen Monitor‑Tier bleiben willst
  • +
+

So hast du 6+ Monate Zeit, inou mit vollem Zugang zu Optimize oder Research auszuprobieren, bevor du entscheidest, ob du bezahlen willst.

+
+
+ + +
+
+

Ja, du kannst deinen Plan jederzeit ändern:

+
    +
  • Upgrade: Wirksam sofort, du erhältst sofortigen Zugang zu neuen Features
  • +
  • Downgrade: Wirksam am Ende deines aktuellen Abrechnungszeitraums
  • +
  • Daten‑Erhaltung: Deine Daten werden bei Downgrade nie gelöscht – Features werden nur schreibgeschützt, bis du wieder upgradest
  • +
+

Beispiel: Wenn du von Optimize zu Monitor downgrades, bleiben deine Labordaten und Genom‑Daten gespeichert, aber du verlierst KI‑Analyse‑Features bis zum nächsten Upgrade.

+
+
+ + +
+
+
    +
  • Monitor (100 MB): Du erhältst eine Benachrichtigung bei 80 % und 95 % deines Limits. Bei 100 % kannst du keine neuen Daten mehr hinzufügen, bis du upgradest oder alte Einträge löschst.
  • +
  • Optimize (1 GB): Gleiche Benachrichtigung. 1 GB deckt ungefähr 1 000 Labordokumente oder 50 Genom‑Dateien.
  • +
  • Research (100 GB): Für medizinische Bildgebung. 100 GB decken ungefähr 200–400 MRI/CT‑Studien je nach Serienanzahl.
  • +
+

Wir berechnen keine Überlastgebühren. Wenn du mehr Speicher brauchst, musst du zum nächsten Tier upgraden oder deine bestehenden Daten verwalten.

+
+
+ + +
+
+

Ja! Alle Stufen beinhalten bis zu 4 Dossiers. Ein „Dossier“ ist ein individuelles Gesundheitsprofil. Das bedeutet, du kannst:

+
    +
  • Deine eigene Gesundheit plus 3 Familienmitglieder (Ehepartner, Kinder, Eltern) verfolgen
  • +
  • Die medizinischen Unterlagen deines Kindes verwalten
  • +
  • Einem älteren Elternteil helfen, Medikamente und Termine zu verfolgen
  • +
  • Separate Profile für komplexe, mehrpersonen‑bezogene Gesundheitssituationen behalten
  • +
+

Jedes Dossier hat eigene Daten, Berechtigungen und Datenschutzeinstellungen. Familienmitglieder können eigene Login‑Zugänge haben oder du kannst alles von deinem Konto aus verwalten.

+
+
+
+
+ + +
+
+
+
+ Features & Capabilities + 7 Fragen +
+
+
+ +
+
+

Alle Stufen:

+
    +
  • Vitalwerte: Blutdruck, Herzfrequenz, Gewicht, Temperatur, Sauerstoffsättigung
  • +
  • Periode/Fertilität: Zyklusdaten, Durchfluss, Symptome, Basaltemperatur, Zervixschleim
  • +
  • Bewegung: Typ, Dauer, Intensität, Routen, Leistungskennzahlen
  • +
  • Symptome: Kopfschmerzen, Schmerzen, Müdigkeit, Verdauungsprobleme, Stimmung, Schlafqualität
  • +
  • Ernährung: Mahlzeitenprotokoll via Text, Stimme oder Foto
  • +
+

Optimize & Research ergänzen:

+
    +
  • Supplemente & Medikamente: Dosierung, Timing, Nachfüllungen, Wechselwirkungen
  • +
  • Familiengeschichte: genetische Erkrankungen, Krankheitsmuster
  • +
  • Labordaten: Bluttests, Panels, Biomarker mit Trend‑Tracking
  • +
  • Verbraucher‑Genom: 23andMe, AncestryDNA oder ähnliche Testergebnisse
  • +
+

Research‑Tier ergänzt:

+
    +
  • Medizinische Bildgebung: MRI, CT, Röntgen (DICOM‑Format)
  • +
  • Klini­ische Genom‑Sequenzierung: Whole Exome, Whole Genome, Gen‑Panels
  • +
+
+
+ + +
+
+

Das ist, was inou anders macht.

+

Ein einzelnes MRI kann tausende Bilder über mehrere Sequenzen (T1, T2, FLAIR, etc.) enthalten. Alle hochzuladen, um sie in einen KI‑Chat zu laden, ist unpraktisch – du würdest Kontextlimits erreichen und Zeit damit verschwenden, Scheiben manuell auszuwählen.

+

inou löst das:

+
    +
  • Lade deinen gesamten Scan einmal hoch (wir behandeln DICOM nativ)
  • +
  • Deine KI sieht die Studien‑Metadaten – welche Sequenzen existieren, wie viele Scheiben, anatomische Positionen
  • +
  • Bei der Analyse fordert die KI genau die Scheiben an, die sie braucht
  • +
  • Sie kann spezifische Bilder auf Abruf holen: „Zeig mir axialen T2‑Schnitt 45“ oder „Vergleiche sagittalen FLAIR bei L4‑L5“
  • +
+

Die KI navigiert intelligent durch deine Bildbibliothek, ohne dass du einzelne Bilder manuell finden und hochladen musst. Frag nach einer hernierten Bandscheibe, und sie holt die relevanten Wirbelsäulen‑Sequenzen. Frag nach einer Hirn‑Läsion, und sie holt die richtigen FLAIR‑Scheiben.

+

Beispiel: „Sieh dir mein Lumbal‑MRI von Mai 2024 an und sag mir, ob es Änderungen im Vergleich zu meinem Januar 2023‑Scan gibt“ – die KI holt und vergleicht automatisch die relevanten Scheiben aus beiden Studien.

+
+
+ + +
+
+

Für Optimize ($12/Monat):

+

Lade deine Rohdaten von 23andMe, AncestryDNA oder ähnlichen Konsumenten‑Tests hoch. inou analysiert ~160 sorgfältig kuratierte, hoch‑vertrauenswürdige genetische Varianten:

+
    +
  • Pharmakogenomik (40 Varianten): Welche Medikamente am besten zu deiner Genetik passen (Statine, Blutverdünner, Antidepressiva, Schmerzmittel)
  • +
  • Krankheitsrisiko (30 Varianten): BRCA1/2, APOE (Alzheimer), Lynch‑Syndrom, familiäre Hypercholesterinämie, Gerinnungsstörungen
  • +
  • Methylierung & Detox (10 Varianten): MTHFR, CBS, MTR – beeinflusst Folsäure‑Metabolismus, B12‑Bedarf, Homocystein
  • +
  • Sportliche Leistung (20 Varianten): Muskel‑Faser‑Typ, VO2max‑Potenzial, Verletzungsrisiko, Erholungs­geschwindigkeit
  • +
  • Ernährung (20 Varianten): Laktoseintoleranz, Koffein‑Metabolismus, Alkohol‑Flush, Vitaminbedarf
  • +
  • Persönlichkeit & Traits (20 Varianten): COMT (Stress‑Antwort), Schlaf‑Chronotyp, Schmerz‑Sensitivität
  • +
  • Physische Traits (20 Varianten): Augenfarbe, Haar‑Merkmale, Ohrwachs‑Typ, Bitter‑Geschmack
  • +
+

Für Research ($35/Monat):

+

Alles oben + Zugang zu allen 5 000+ Varianten, die von SNPedia analysiert werden, einschließlich:

+
    +
  • Seltene Krankheitsvarianten
  • +
  • Unsichere/frühe Forschungsergebnisse
  • +
  • Polygenische Risikobewertungen für 50+ Bedingungen
  • +
  • Trägerstatus für 200+ rezessive Erkrankungen
  • +
  • Suche nach beliebigem rsID oder Gen
  • +
  • Klini­ische Genom‑Sequenzierungsdaten (WES/WGS)
  • +
+

Datenschutz‑Kontrolle: Du entscheidest, ob du schützende Varianten (gute Nachrichten), Risikovarianten (schlechte Nachrichten) oder beides zeigen willst. Manche Leute wollen umfassende Infos; andere wollen keine Risiken sehen, die sie nicht kontrollieren können.

+
+
+ + +
+
+

inou verbindet KI‑Assistenten wie Claude und Grok direkt mit deinen Gesundheitsdaten. Statt Informationen manuell zu kopieren und einzufügen, kann deine KI:

+
    +
  • Deine komplette medizinische Vorgeschichte lesen
  • +
  • Trends über Vitalwerte, Labore, Symptome analysieren
  • +
  • Genom‑Daten mit Medikamentenreaktionen korrelieren
  • +
  • Fragen unter Verwendung DEINER spezifischen Gesundheitsdaten beantworten
  • +
+

Wie es funktioniert:

+
    +
  1. Verbinde deine KI mit inou (Claude via MCP‑Bridge, Grok via API)
  2. +
  3. Stelle natürliche Gesundheitsfragen: „Warum habe ich Kopfschmerzen?“ oder „Ist dieses Medikament für mein Genom sicher?“
  4. +
  5. KI sieht deine relevanten Daten und gibt personalisierte Antworten
  6. +
  7. Daten verlassen inou nie dauerhaft – KI fragt sie in Echtzeit ab
  8. +
+

Monitor‑Tier: MCP funktioniert, aber KI hat begrenzte Daten (keine Labore/Genom), daher sind Einblicke grundlegend

+

Optimize/Research: Vollständige KI‑Fähigkeiten mit komplettem Gesundheits‑Kontext

+
+
+ + +
+
+

Derzeit unterstützt:

+
    +
  • Labordaten: PDF‑Upload mit OCR
  • +
  • Genom: 23andMe, AncestryDNA Rohdaten‑Dateien
  • +
  • Medizinische Bildgebung: DICOM‑Dateien aus Radiologie
  • +
  • Fotos: Medikamentenflaschen, Nahrung, Gesundheitsdokumente
  • +
+

In Kürze:

+
    +
  • Apple Health / HealthKit‑Integration
  • +
  • Google Fit‑Integration
  • +
  • Wearable‑Geräte (Garmin, Oura, Whoop)
  • +
  • MyChart / Epic‑Integration
  • +
  • Labor­portal‑Direktimporte
  • +
+

Du kannst Daten auch manuell per Text oder Stimme eingeben, falls noch nicht automatisiert.

+
+
+ + +
+
+

Nein. inou ist ein Tool zur Organisation deiner Gesundheitsdaten und zur Unterstützung der KI, sie zu verstehen. Es ist NICHT:

+
    +
  • Ein Diagnose‑Tool
  • +
  • Ein Ersatz für medizinische Beratung
  • +
  • Ein Behandlungsempfehlungssystem
  • +
  • Ein Rezept‑Service
  • +
+

inou hilft dir:

+
    +
  • Verfolgen deiner Gesundheit umfassend
  • +
  • Verstehen von Mustern und Trends
  • +
  • Kommunizieren besser mit deinem Arzt (Berichte exportieren für Termine)
  • +
  • Forschung deiner Bedingungen mit KI und deinem persönlichen Kontext
  • +
  • Verwalten von Medikamenten und Symptomen
  • +
+

Sprich immer mit deinem Gesundheits‑Provider für medizinische Entscheidungen. Betrachte inou als deine Gesundheits‑Infrastruktur – sie macht dich zu einem informierten Patienten, aber dein Arzt trifft die klinischen Entscheidungen.

+
+
+
+
+ + +
+
+
+
+ Kostenlose Phase & Early Access + 5 Fragen +
+
+
+ +
+
+

Wir befinden uns in aktiver Entwicklung und wollen frühe Nutzer dazu bringen:

+
    +
  1. Features testen und Feedback geben, während wir das Produkt verfeinern
  2. +
  3. Ihre Gesundheitsdaten aufbauen ohne Kosten zu befürchten
  4. +
  5. Vollen Nutzen erleben bevor sie sich für ein Abonnement entscheiden
  6. +
  7. Uns verbessern helfen durch Bug‑Reports und Feature‑Vorschläge
  8. +
+

Frühe Anwender sind unglaublich wertvoll. Diese kostenlose Phase ist unsere Art, Danke zu sagen, dass du Teil der Reise bist.

+
+
+ + +
+
+

Wir kontaktieren dich vor dem 1. Juli, um zu fragen, ob du weitermachen möchtest:

+
    +
  • Mit kostenpflichtigem Tier fortsetzen: Abonnieren zum aktuellen Preis (Preise für Early‑Users gesichert)
  • +
  • Zum Monitor (Free) downgraden: Nutze weiterhin Basis‑Features für immer kostenlos
  • +
  • Exportieren und verlassen: Lade alle deine Daten herunter und kündige
  • +
+

Wichtig: Dein Abonnement wird NICHT automatisch verlängert. Wir belasten dich niemals ohne ausdrückliche Bestätigung. Keine Überraschungen, keine versteckten Gebühren.

+
+
+ + +
+
+

Für Early‑Users, die sich während der kostenlosen Phase anmelden:

+
    +
  • Preise gesichert: Wenn du nach dem 1. Juli abonniert, zahlst du 2026‑Preise, auch wenn wir später erhöhen
  • +
  • Für immer verankert: Solange du kontinuierlich abonnierst, steigt dein Tarif nie
  • +
  • Beispiel: Wenn du im Juli 2026 $12/Monat abonnierst und wir die Preise im 2027 auf $15/Monat erhöhen, zahlst du trotzdem $12/Monat
  • +
+

Neue Nutzer nach dem 1. Juli zahlen, was zu diesem Zeitpunkt der aktuelle Preis ist.

+
+
+ + +
+
+

Nein – erstelle ein umfassendes Dossier mit so vielen Informationen wie möglich. Je mehr Daten deine KI hat, desto bessere Einblicke kann sie liefern.

+

Du kannst mehrere Dossiers unter verschiedenen E‑Mail‑Adressen erstellen, aber es gibt keinen Nutzen, deine Gesundheitsdaten zu splitten. Halte alles an einem Ort für die beste KI‑Erfahrung.

+

Verwende separate Dossiers für Familienmitglieder, nicht für dich selbst.

+
+
+
+
+ + +
+
+
+
+ Zahlung & Abrechnung + 5 Fragen +
+
+
+ +
+
+
    +
  • Credit‑Cards (Visa, Mastercard, American Express, Discover)
  • +
  • Debit‑Cards
  • +
  • Digitale Wallets (Apple Pay, Google Pay)
  • +
  • ACH‑Banküberweisungen (nur Jahrespläne)
  • +
+

In Kürze: PayPal, Venmo

+
+
+ + +
+
+

Nein. Die Zahlungsabwicklung erfolgt über Stripe, einen zertifizierten PCI Service Provider Level 1 (höchster Sicherheitsstandard). Wir sehen oder speichern deine Kreditkartendetails nie. Stripe kümmert sich um alle Zahlungssicherheits‑Aspekte.

+
+
+ + +
+
+

Monatliche Pläne:

+
    +
  • Erste Belastung: 1. Juli 2026 (oder später, wenn du dich danach anmeldest)
  • +
  • Wiederkehrend: Gleiches Datum jeden Monat (wenn du dich am 15. Juli anmeldest, wird der 15. jeden Monats belastet)
  • +
  • Pro-rata: Wenn du mitten im Zyklus upgradest, wird die pro‑rata‑Differenz sofort berechnet
  • +
+

Jahrespläne:

+
    +
  • Erste Belastung: 1. Juli 2026 (oder später)
  • +
  • Wiederkehrend: Gleiches Datum jedes Jahr
  • +
  • Keine Mid‑Year‑Belastungen, außer du upgradest
  • +
+
+
+ + +
+
+

30‑Tage‑Money‑Back‑Guarantee:

+

Wenn du nach dem 1. Juli 2026 abonniert hast und nicht zufrieden bist, beantrage innerhalb von 30 Tagen eine vollständige Rückerstattung. Keine Fragen.

+

Benutzer der kostenlosen Phase:

+

Da du den Service Monate lang kostenlos genutzt hast, sind Rückerstattungen nach Ablauf der 30‑Tage‑Garantie nicht möglich. Du kannst jederzeit kündigen, um zukünftige Gebühren zu vermeiden.

+
+
+ + +
+
+ + +
+
+
+
+ Stornierung & Daten + 4 Fragen +
+
+
+ +
+
+
    +
  1. Gehe zu Kontoeinstellungen
  2. +
  3. Klicke auf „Abonnement“
  4. +
  5. Klicke auf „Abonnement kündigen“
  6. +
  7. Bestätige die Kündigung
  8. +
+

Wirksam:

+
    +
  • Ende des aktuellen Abrechnungszeitraums (du behältst Zugriff bis dahin)
  • +
  • Unmittelbares Downgrade auf Monitor (Free)
  • +
  • Keine weiteren Gebühren
  • +
+

Deine Daten:

+
    +
  • Nie gelöscht
  • +
  • Im Lese‑Nur‑Modus weiterhin zugänglich
  • +
  • Voller Zugriff wiederhergestellt, wenn du wieder abonniert
  • +
+
+
+ + + + + + +
+
+ + +
+
+
+
+ Datenschutz & Sicherheit + 9 Fragen +
+
+
+ + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+ Technisch & Support + 6 Fragen +
+
+
+ + + + + + + + + + + +
+
+ + +
+
+
+
+ Erste Schritte + 5 Fragen +
+
+
+ + + + + + + + + +
+
+ + +
+
+

Noch Fragen?

+

Wir sind ein kleines Team, das etwas baut, an das wir glauben. Wenn du Fragen, Ideen oder Feedback hast – wir wollen es hören.

+

+ E‑Mail uns: support@inou.com +

+
+
+ + {{template "footer"}} +
+{{end}} \ No newline at end of file diff --git a/portal/templates/faq_es.tmpl b/portal/templates/faq_es.tmpl new file mode 100644 index 0000000..dbf6bdb --- /dev/null +++ b/portal/templates/faq_es.tmpl @@ -0,0 +1,1096 @@ +{{define "faq_es"}} + + +
+
+
+

Preguntas Frecuentes

+

Todo lo que necesitas saber sobre la salud con inou

+
+
+ + +
+
+
+
+ Precios y Planes + 7 preguntas +
+
+
+ +
+
+

Monitor (Gratis)

+
    +
  • Registra signos vitales, período/fertilidad, ejercicio, síntomas y alimentos
  • +
  • Entrada de texto y voz
  • +
  • Hasta 4 dossiers (miembros de la familia)
  • +
  • 100MB de almacenamiento
  • +
  • Integración MCP con insights de IA limitados
  • +
  • Perfecto para seguimiento básico de salud
  • +
+

Optimize ($12/mes o $120/año)

+
    +
  • Todo en Monitor, más:
  • +
  • Cargas de fotos con OCR
  • +
  • Seguimiento de suplementos y medicamentos
  • +
  • Historial familiar
  • +
  • Seguimiento de resultados de laboratorio
  • +
  • Análisis de genoma de consumidor (~160 variantes curadas que cubren farmacogenómica, riesgos de enfermedades, metilación, rendimiento atlético, nutrición, rasgos de personalidad y rasgos físicos)
  • +
  • Insights completos de IA, análisis de tendencias, predicciones y correlaciones de salud
  • +
  • 1GB de almacenamiento
  • +
  • Hasta 4 dossiers
  • +
+

Research ($35/mes o $350/año)

+
    +
  • Todo en Optimize, más:
  • +
  • Imágenes médicas (resonancias magnéticas, tomografías, radiografías)
  • +
  • Análisis de genoma completo (todas las 5,000+ variantes de SNPedia)
  • +
  • Soporte para secuenciación genómica clínica
  • +
  • Navegar y buscar cualquier variante genética
  • +
  • 100GB de almacenamiento (los archivos de imágenes son grandes)
  • +
  • Hasta 4 dossiers
  • +
+
+
+ + +
+
+

Los planes anuales tienen el precio de 10 meses - obtienes 2 meses gratis:

+
    +
  • Optimize: $120/año en lugar de $144 (ahorras $24)
  • +
  • Research: $350/año en lugar de $420 (ahorras $70)
  • +
+
+
+ + +
+
+

inou está en desarrollo activo. Si te registras ahora:

+
    +
  • Sin cargos hasta el 1 de julio de 2026 - usa cualquier nivel pago completamente gratis
  • +
  • Sin renovación automática el 1 de julio de 2026 - te preguntaremos si quieres continuar
  • +
  • No se requiere tarjeta de crédito durante el acceso temprano - solo regístrate y comienza a usarlo
  • +
  • Elige continuar con un plan pago o quedarte en el nivel Monitor gratis después del 1 de julio
  • +
+

Esto te da 6+ meses para probar inou con acceso completo a las funciones de Optimize o Research antes de decidir si quieres pagar.

+
+
+ + +
+
+

Sí, puedes cambiar tu plan en cualquier momento:

+
    +
  • Mejorar: Se aplica inmediatamente, obtienes acceso a las nuevas funciones de inmediato
  • +
  • Reducir: Se aplica al final de tu período de facturación actual
  • +
  • Preservación de datos: Tus datos nunca se eliminan cuando reduces - las funciones solo se vuelven de solo lectura hasta que mejores nuevamente
  • +
+

Por ejemplo, si reduces de Optimize a Monitor, tus resultados de laboratorio y datos genómicos permanecen almacenados, pero perderás las funciones de análisis de IA hasta que mejores nuevamente.

+
+
+ + +
+
+
    +
  • Monitor (100MB): Recibirás una notificación cuando alcances el 80% y 95% de tu límite. Al 100%, no puedes agregar nuevos datos hasta que mejores o elimines entradas antiguas.
  • +
  • Optimize (1GB): Mismo sistema de notificaciones. 1GB cubre aproximadamente 1,000 PDFs de laboratorio o 50 archivos de genoma de consumidor.
  • +
  • Research (100GB): Diseñado para imágenes médicas. 100GB cubre aproximadamente 200-400 estudios de resonancia/tomografía dependiendo del número de series.
  • +
+

No cobramos tarifas por exceso. Si necesitas más almacenamiento, tendrás que mejorar al siguiente nivel o administrar tus datos existentes.

+
+
+ + +
+
+

¡Sí! Todos los niveles incluyen hasta 4 dossiers. Un "dossier" es un perfil de salud individual. Esto significa que puedes:

+
    +
  • Registrar tu propia salud más 3 miembros de la familia (cónyuge, hijos, padres)
  • +
  • Administrar los registros médicos de tu hijo
  • +
  • Ayudar a un padre anciano a seguir sus medicamentos y citas
  • +
  • Mantener perfiles separados para situaciones de salud complejas de múltiples personas
  • +
+

Cada dossier tiene sus propios datos, permisos y configuraciones de privacidad. Los miembros de la familia pueden tener su propio acceso de inicio de sesión o puedes administrar todo desde tu cuenta.

+
+
+
+
+ + +
+
+
+
+ Funciones y Capacidades + 7 preguntas +
+
+
+ +
+
+

Todos los niveles:

+
    +
  • Signos vitales: presión arterial, frecuencia cardíaca, peso, temperatura, saturación de oxígeno
  • +
  • Período/fertilidad: fechas del ciclo, flujo, síntomas, temperatura basal, moco cervical
  • +
  • Ejercicio: tipo, duración, intensidad, rutas, métricas de rendimiento
  • +
  • Síntomas: dolores de cabeza, dolor, fatiga, problemas digestivos, estado de ánimo, calidad del sueño
  • +
  • Alimentos: registro de comidas vía texto, voz o foto
  • +
+

Optimize y Research agregan:

+
    +
  • Suplementos y medicamentos: dosis, horario, reposiciones, interacciones
  • +
  • Historial familiar: condiciones genéticas, patrones de enfermedades
  • +
  • Resultados de laboratorio: análisis de sangre, paneles, biomarcadores con seguimiento de tendencias
  • +
  • Genoma de consumidor: resultados de pruebas de 23andMe, AncestryDNA o similares
  • +
+

Research agrega:

+
    +
  • Imágenes médicas: resonancias magnéticas, tomografías, radiografías (formato DICOM)
  • +
  • Secuenciación genómica clínica: exoma completo, genoma completo, paneles de genes
  • +
+
+
+ + +
+
+

Esto es lo que hace diferente a inou.

+

Una sola resonancia magnética puede contener miles de imágenes a través de múltiples secuencias (T1, T2, FLAIR, etc.). Subir todas a un chat de IA es impracticable - alcanzarías límites de contexto y perderías tiempo seleccionando slices manualmente.

+

inou resuelve esto:

+
    +
  • Sube toda tu resonancia una vez (manejamos nativamente DICOM)
  • +
  • Tu IA ve los metadatos del estudio - qué secuencias existen, cuántos slices, posiciones anatómicas
  • +
  • Al analizar, la IA solicita exactamente los slices que necesita
  • +
  • Puede obtener imágenes específicas bajo demanda: "muéstrame el slice axial T2 45" o "compara FLAIR sagital en L4-L5"
  • +
+

La IA navega inteligentemente tu biblioteca de imágenes sin que tengas que encontrar y subir manualmente imágenes individuales. Pregunta sobre un disco herniado, y obtiene las secuencias relevantes de la columna. Pregunta sobre una lesión cerebral, y obtiene los slices FLAIR correctos.

+

Ejemplo: "Mira mi resonancia lumbar de mayo de 2024 y dime si hay algún cambio comparado con mi resonancia de enero de 2023" - la IA obtiene y compara los slices relevantes de ambos estudios automáticamente.

+
+
+ + +
+
+

Para Optimize ($12/mes):

+

Sube tu archivo de datos sin procesar de 23andMe, AncestryDNA o pruebas de consumidor similares. inou analiza ~160 variantes genéticas cuidadosamente curadas de alta confianza:

+
    +
  • Farmacogenómica (40 variantes): Qué medicamentos funcionan mejor para tu genética (estatinas, anticoagulantes, antidepresivos, analgésicos)
  • +
  • Riesgo de enfermedades (30 variantes): BRCA1/2, APOE (Alzheimer), síndrome de Lynch, hipercolesterolemia familiar, trastornos de coagulación
  • +
  • Metilación y detoxificación (10 variantes): MTHFR, CBS, MTR - afecta el metabolismo del folato, necesidades de B12, homocisteína
  • +
  • Rendimiento atlético (20 variantes): Tipo de fibra muscular, potencial de VO2max, riesgo de lesiones, velocidad de recuperación
  • +
  • Nutrición (20 variantes): Intolerancia a la lactosa, metabolismo de cafeína, rubor por alcohol, necesidades de vitaminas
  • +
  • Personalidad y rasgos (20 variantes): COMT (respuesta al estrés), cronotipo del sueño, sensibilidad al dolor
  • +
  • Rasgos físicos (20 variantes): Color de ojos, rasgos del cabello, tipo de cerumen, sabor amargo
  • +
+

Para Research ($35/mes):

+

Todo lo anterior MÁS acceso a todas las 5,000+ variantes analizadas por SNPedia, incluyendo:

+
    +
  • Variantes de enfermedades raras
  • +
  • Hallazgos de investigación inciertos/tempranos
  • +
  • Puntuaciones de riesgo poligénico para 50+ condiciones
  • +
  • Estado de portador para 200+ condiciones recesivas
  • +
  • Buscar cualquier rsID o gen
  • +
  • Datos de secuenciación genómica clínica (WES/WGS)
  • +
+

Control de privacidad: Eliges si mostrar variantes protectoras (buenas noticias), variantes de riesgo (malas noticias) o ambas. Algunas personas quieren información integral; otras prefieren no ver riesgos que no pueden controlar.

+
+
+ + +
+
+

inou conecta asistentes de IA como Claude y Grok directamente a tus datos de salud. En lugar de copiar y pegar información manualmente, tu IA puede:

+
    +
  • Leer tu historial médico completo
  • +
  • Analizar tendencias a través de signos vitales, laboratorios, síntomas
  • +
  • Correlacionar datos genómicos con respuestas a medicamentos
  • +
  • Responder preguntas usando TUS datos de salud específicos
  • +
+

Cómo funciona:

+
    +
  1. Conecta tu IA a inou (Claude vía puente MCP, Grok vía API)
  2. +
  3. Haz preguntas de salud naturalmente: "¿Por qué tengo dolores de cabeza?" o "¿Es este medicamento seguro para mi genoma?"
  4. +
  5. La IA ve tus datos relevantes y te da respuestas personalizadas
  6. +
  7. Los datos nunca salen de inou permanentemente - la IA los consulta en tiempo real
  8. +
+

Nivel Monitor: MCP funciona, pero la IA tiene datos limitados (sin laboratorios/genoma), así que los insights son básicos

+

Optimize/Research: Capacidades completas de IA con contexto de salud completo

+
+
+ + +
+
+

Actualmente soportado:

+
    +
  • Resultados de laboratorio: Carga de PDF con OCR
  • +
  • Genoma: Archivos de datos sin procesar de 23andMe, AncestryDNA
  • +
  • Imágenes médicas: Archivos DICOM de radiología
  • +
  • Fotos: Botellas de medicamentos, alimentos, documentos de salud
  • +
+

Próximamente:

+
    +
  • Integración con Apple Health / HealthKit
  • +
  • Integración con Google Fit
  • +
  • Dispositivos wearables (Garmin, Oura, Whoop)
  • +
  • Integración con MyChart / Epic
  • +
  • Importaciones directas de portales de laboratorio
  • +
+

También puedes ingresar datos manualmente vía texto o voz para cualquier cosa que aún no esté automatizada.

+
+
+ + +
+
+

No. inou es una herramienta para organizar tus datos de salud y permitir que la IA te ayude a entenderlos. NO es:

+
    +
  • Una herramienta de diagnóstico
  • +
  • Un reemplazo para el consejo médico
  • +
  • Un sistema de recomendación de tratamiento
  • +
  • Un servicio de recetas
  • +
+

inou te ayuda a:

+
    +
  • Registrar tu salud de manera integral
  • +
  • Entender patrones y tendencias
  • +
  • Comunicarte mejor con tu médico (exportar informes para citas)
  • +
  • Investigar tus condiciones usando IA con tu contexto personal
  • +
  • Administrar medicamentos y síntomas
  • +
+

Siempre consulta a tu proveedor de atención médica para decisiones médicas. Piensa en inou como tu infraestructura de datos de salud - te hace un paciente más informado, pero tu médico toma las decisiones clínicas.

+
+
+
+
+ + +
+
+
+
+ Período Gratis y Acceso Temprano + 5 preguntas +
+
+
+ +
+
+

Estamos en desarrollo activo y queremos que los primeros usuarios:

+
    +
  1. Prueben las funciones y den retroalimentación mientras refinamos el producto
  2. +
  3. Construyan sus datos de salud sin preocuparse por los costos
  4. +
  5. Experimenten el valor completo antes de comprometerse con una suscripción
  6. +
  7. Nos ayuden a mejorar reportando errores y sugiriendo funciones
  8. +
+

Los primeros usuarios son increíblemente valiosos. Este período gratis es nuestra forma de darte las gracias por ser parte del viaje.

+
+
+ + +
+
+

Te contactaremos antes del 1 de julio para preguntarte si quieres continuar:

+
    +
  • Continuar con nivel pago: Suscríbete a los precios actuales (precios bloqueados para primeros usuarios)
  • +
  • Reducir a Monitor (Gratis): Sigue usando funciones básicas para siempre sin costo
  • +
  • Exportar y salir: Descarga todos tus datos y cancela
  • +
+

Importante: Tu suscripción NO se renovará automáticamente. Nunca te cobraremos sin confirmación explícita. Sin sorpresas, sin cobros ocultos. +

+
+ + +
+
+

Para los primeros usuarios que se registren durante el período gratis:

+
    +
  • Precios bloqueados: Si te suscribes después del 1 de julio, pagarás los precios de 2026 incluso si los aumentamos después
  • +
  • Precio garantizado para siempre: Mientras mantengas tu suscripción continua, tu tarifa nunca aumenta
  • +
  • Ejemplo: Si te suscribes a $12/mes en julio de 2026 y aumentamos los precios a $15/mes en 2027, tú sigues pagando $12/mes
  • +
+

Los nuevos usuarios después de julio de 2026 pagarán los precios vigentes en ese momento.

+
+
+ + +
+
+

No - construye un dossier integral con toda la información posible. Cuantos más datos tenga tu IA acceso, mejores insights puede proporcionar.

+

Puedes crear múltiples dossiers bajo diferentes direcciones de correo electrónico, pero no hay beneficio dividir tus datos de salud. Mantén todo en un lugar para la mejor experiencia de IA.

+

Usa dossiers separados para miembros de la familia, no para ti mismo.

+
+
+
+
+ + +
+
+
+
+ Pago y Facturación + 5 preguntas +
+
+
+ +
+
+
    +
  • Tarjetas de crédito (Visa, Mastercard, American Express, Discover)
  • +
  • Tarjetas de débito
  • +
  • Billeteras digitales (Apple Pay, Google Pay)
  • +
  • Transferencias bancarias ACH (solo planes anuales)
  • +
+

Próximamente: PayPal, Venmo

+
+
+ + +
+
+

No. El procesamiento de pagos es manejado por Stripe, un Proveedor de Servicios PCI Certificado Nivel 1 (el estándar de seguridad más alto). Nunca vemos ni almacenamos los detalles de tu tarjeta de crédito. Stripe maneja toda la seguridad de los pagos.

+
+
+ + +
+
+

Planes mensuales:

+
    +
  • Primer cargo: 1 de julio de 2026 (o después si te registras después de esa fecha)
  • +
  • Recurrente: Mismo día cada mes (si te suscribes el 15 de julio, se te cobra el 15 de cada mes)
  • +
  • Prorrateado: Si mejoras a mitad de ciclo, se te cobra la diferencia prorrateada inmediatamente
  • +
+

Planes anuales:

+
    +
  • Primer cargo: 1 de julio de 2026 (o después)
  • +
  • Recurrente: Misma fecha cada año
  • +
  • Sin cargos a mitad de año a menos que mejores de nivel
  • +
+
+
+ + +
+
+

Garantía de devolución de dinero de 30 días:

+

Si te suscribes después del 1 de julio de 2026 y no estás satisfecho, solicita un reembolso completo dentro de 30 días. Sin preguntas.

+

Usuarios del período gratis:

+

Como usaste el servicio gratis durante meses antes de suscribirte, los reembolsos no están disponibles después de que expire la garantía de 30 días. Siempre puedes cancelar para evitar cargos futuros.

+
+
+ + +
+
+
    +
  1. Día 1: Reintento automático
  2. +
  3. Día 3: Notificación por correo + reintento
  4. +
  5. Día 7: Reintento final + cuenta bloqueada (acceso de solo lectura)
  6. +
  7. Día 14: Cuenta suspendida (sin acceso hasta que el pago se resuelva)
  8. +
  9. Día 30: Cuenta programada para eliminación
  10. +
+

Tus datos nunca se eliminan antes de 30 días, y enviaremos múltiples notificaciones. Actualiza tu método de pago en cualquier momento para restaurar el acceso inmediatamente.

+
+
+
+
+ + +
+
+
+
+ Cancelación y Datos + 4 preguntas +
+
+
+ +
+
+
    +
  1. Ve a Configuración de Cuenta
  2. +
  3. Haz clic en la pestaña "Suscripción"
  4. +
  5. Haz clic en "Cancelar Suscripción"
  6. +
  7. Confirma la cancelación
  8. +
+

Se aplica:

+
    +
  • Final del período de facturación actual (mantienes acceso hasta entonces)
  • +
  • Bajada inmediata al nivel Monitor (Gratis)
  • +
  • Sin cargos adicionales
  • +
+

Tus datos: +

    +
  • Nunca se eliminan
  • +
  • Permanecen almacenados y accesibles en modo de solo lectura
  • +
  • Acceso completo restaurado si te vuelves a suscribir
  • +
+
+
+ + +
+
+

Sí, en cualquier momento. Solo:

+
    +
  1. Ve a Configuración de Cuenta
  2. +
  3. Haz clic en "Mejorar"
  4. +
  5. Elige tu plan e ingresa el pago
  6. +
+

Tus datos siguen ahí - tendrás acceso inmediato a todo nuevamente.

+
+
+ + +
+
+

La eliminación de cuenta es permanente e inmediata:

+
    +
  1. Ve a Configuración de Cuenta
  2. +
  3. Haz clic en "Eliminar Cuenta"
  4. +
  5. Confirma la eliminación (requiere escribir "DELETE" para confirmar)
  6. +
  7. Todos los datos se destruyen permanentemente dentro de 24 horas
  8. +
+

Antes de eliminar:

+
    +
  • Exporta tus datos (proporcionamos formatos estándar)
  • +
  • Descarga cualquier informe o documento que quieras mantener
  • +
  • Considera cancelar en su lugar (mantiene tus datos para uso futuro)
  • +
+

Después de la eliminación:

+
    +
  • No se puede deshacer
  • +
  • No se puede recuperar ningún dato
  • +
  • Las copias de seguridad se purgan dentro de 30 días
  • +
+
+
+ + +
+
+

Sí, en cualquier momento. Formatos de exportación:

+
    +
  • Datos estructurados: JSON, CSV
  • +
  • Laboratorios: Copias en PDF de las cargas originales
  • +
  • Genoma: Archivo de datos sin procesar original
  • +
  • Imágenes: Archivos DICOM
  • +
  • Informes: Resúmenes en PDF con gráficos y tendencias
  • +
+

La exportación incluye todo: signos vitales, síntomas, medicamentos, laboratorios, genoma, imágenes, notas - tu registro de salud completo.

+

Casos de uso:

+
    +
  • Cambiar a otro servicio
  • +
  • Compartir con proveedores de atención médica
  • +
  • Respaldo personal
  • +
  • Investigación o análisis
  • +
+

Tus datos te pertenecen a ti. Nosotros solo los almacenamos para ti.

+
+
+
+
+ + +
+
+
+
+ Privacidad y Seguridad + 9 preguntas +
+
+
+ +
+
+

Servidores basados en Estados Unidos usando infraestructura de nivel empresarial:

+
    +
  • No en nubes de Big Tech (sin Google, Amazon, Microsoft)
  • +
  • Centros de datos independientes con seguridad física
  • +
  • Copias de seguridad redundantes en múltiples ubicaciones
  • +
  • Infraestructura compatible con HIPAA
  • +
+

Si accedes a inou desde fuera de Estados Unidos, tus datos cruzan fronteras internacionales. Aplicamos las mismas protecciones de seguridad y privacidad sin importar tu ubicación.

+
+
+ + +
+
+

Cifrado FIPS 140-3 (estándar del gobierno de EE.UU.):

+
    +
  • En reposo: Todos los archivos cifrados usando criptografía validada FIPS 140-3
  • +
  • En tránsito: Cifrado TLS 1.3 para todas las conexiones
  • +
  • Copias de seguridad: Cifradas con claves separadas
  • +
  • Gestión de claves: Módulos de seguridad de hardware (HSMs)
  • +
+

Este es el mismo estándar de cifrado usado por bancos, hospitales y agencias gubernamentales.

+
+
+ + +
+
+

Solo tú. Nunca:

+
    +
  • Compartimos datos con anunciantes
  • +
  • Vendemos datos a terceros
  • +
  • Usamos datos para entrenar modelos de IA
  • +
  • Minamos datos para investigación sin consentimiento explícito
  • +
  • Proporcionamos datos a socios o afiliados
  • +
+

Aplicación de la ley:

+

Cumplimos con solicitudes legales (órdenes judiciales, citaciones) pero nada más. Si se nos presenta una demanda legal válida, debemos proporcionar los datos solicitados. Te notificaremos a menos que la ley lo prohíba.

+

Tu IA:

+

Cuando conectas IA vía MCP, tus datos se transmiten a través de un puente cifrado a tu sesión de IA. La IA los procesa en tiempo real pero no los almacena permanentemente. Consulta la política de privacidad de tu proveedor de IA para sus prácticas de manejo de datos.

+
+
+ + +
+
+

No, excepto:

+
  • Solicitas explícitamente soporte que requiere acceso a datos
  • +
  • Obligaciones legales (orden judicial)
  • +
  • Investigación de incidentes de seguridad críticos
  • + +

    Cuando se otorga acceso:

    +
      +
    • Restringido solo a personal senior
    • +
    • Registrado en auditoría (visible en Configuración de Cuenta)
    • +
    • Limitado en tiempo (el acceso expira después de 24 horas)
    • +
    • Se te notifica cuando ocurre el acceso
    • +
    +

    Empleados aleatorios, contratistas o desarrolladores nunca tienen acceso a tus datos de salud.

    +
    +
    + + +
    +
    +

    Nunca. Tus datos son:

    +
      +
    • No usados para entrenar modelos de aprendizaje automático
    • +
    • No usados para mejorar asistentes de IA
    • +
    • No usados para investigación o desarrollo
    • +
    • No anonimizados y agregados para análisis
    • +
    +

    Si alguna vez queremos usar datos anonimizados y agregados para investigación:

    +
      +
    1. Pediremos consentimiento explícito de inclusión
    2. +
    3. Explicaremos exactamente qué estamos estudiando
    4. +
    5. Proporcionaremos la capacidad de excluirte en cualquier momento
    6. +
    7. Nunca compartiremos datos identificables
    8. +
    +
    +
    + + +
    +
    +

    Ninguno. No usamos:

    +
      +
    • Google Analytics
    • +
    • Píxeles de Meta
    • +
    • Scripts de tracking
    • +
    • Cookies de terceros
    • +
    • Redes publicitarias
    • +
    +

    Lo que sí rastreamos:

    +
      +
    • Una cookie para la sesión de inicio de sesión
    • +
    • Direcciones IP solo para registros de seguridad
    • +
    • Registros de errores para depuración (sin datos personales)
    • +
    +

    No tenemos idea de qué haces clic, de dónde viniste o a dónde vas a continuación.

    +
    +
    + + +
    +
    +

    Sí. Seguimos los estándares de HIPAA:

    +
      +
    • Acuerdos de Asociado de Negocios disponibles para entidades cubiertas
    • +
    • Salvaguardas administrativas, físicas y técnicas
    • +
    • Procedimientos de notificación de violaciones
    • +
    • Controles de auditoría y registros de acceso
    • +
    • Almacenamiento y transmisión cifrados
    • +
    +

    También cumplimos con:

    +
      +
    • GDPR (protección de datos europea)
    • +
    • FADP (protección de datos suiza)
    • +
    • CCPA (privacidad del consumidor de California)
    • +
    +

    Sin importar dónde vivas, obtienes nuestro nivel más alto de protección de privacidad.

    +
    +
    + + +
    +
    +

    Usuarios menores de 18 años:

    +
      +
    • No pueden crear cuentas independientemente
    • +
    • Requieren autorización de padre/tutor
    • +
    • El padre/tutor mantiene control total
    • +
    • Puede revocarse en cualquier momento
    • +
    +

    Los padres/tutores pueden:

    +
      +
    • Crear dossiers para hijos
    • +
    • Administrar todos los datos y accesos
    • +
    • Controlar compartir e integración de IA
    • +
    • Eliminar los datos del hijo en cualquier momento
    • +
    +

    Los menores no pueden compartir sus datos con terceros o conectar IA sin consentimiento parental.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + Técnico y Soporte + 6 preguntas +
    +
    +
    + +
    +
    +

    Navegador web (todos los niveles):

    +
      +
    • Chrome, Firefox, Safari, Edge
    • +
    • Navegadores de escritorio y móviles
    • +
    • Diseño responsivo para cualquier tamaño de pantalla
    • +
    +

    Aplicaciones móviles (llegando Q2 2026):

    +
      +
    • iOS (iPhone, iPad)
    • +
    • Android
    • +
    • Aplicaciones nativas con paridad completa de funciones
    • +
    +

    Aplicaciones de escritorio (planeado):

    +
      +
    • macOS
    • +
    • Windows
    • +
    +
    +
    + + +
    +
    +

    Actualmente soportado:

    +
      +
    • Claude (Anthropic) - vía puente MCP (archivo .mcpb)
    • +
    • Grok (xAI) - vía API directa
    • +
    +

    Estamos agregando activamente más integraciones. Consulta inou.com/connect para la lista más reciente.

    +
    +
    + + +
    +
    +

    ¡Repórtalo! Queremos saber:

    +
      +
    • Correo: support@inou.com
    • +
    • En la app: Ayuda → Reportar Error
    • +
    • Incluye capturas de pantalla si es posible
    • +
    +

    Los primeros usuarios que reportan errores nos ayudan a construir un mejor producto. Arreglamos problemas críticos dentro de 24 horas y problemas menores dentro de una semana.

    +
    +
    + + +
    +
    +

    Sí:

    +
      +
    • Soporte por correo: support@inou.com (respuesta en 24-48 horas)
    • +
    • Esta página de FAQ
    • +
    • Guías de configuración en inou.com/connect
    • +
    +
    +
    + + +
    +
    +

    ¡Por supuesto! Envía un correo a features@inou.com o usa la herramienta de retroalimentación en la app. Mantenemos un roadmap público e implementamos regularmente sugerencias de usuarios.

    +

    Los primeros usuarios tienen influencia significativa en la dirección del producto - si suficientes personas quieren una función, la priorizamos.

    +
    +
    + + +
    +
    +

    Nos comprometemos a:

    +
      +
    • 90 días de aviso previo
    • +
    • Herramientas de exportación para todos los datos
    • +
    • Recomendaciones para servicios alternativos
    • +
    • Opción de autoalojar tus datos
    • +
    +

    Si nos adquieren, tus datos o:

    +
      +
    • Se transfieren bajo los mismos términos de privacidad, O
    • +
    • Se te da la opción de exportar y eliminar
    • +
    +

    Nunca venderemos datos de usuarios como parte de una adquisición. Son tus datos, no nuestro activo.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + Comenzando + 5 preguntas +
    +
    +
    + +
    +
    +
      +
    1. Ve a inou.com
    2. +
    3. Ingresa tu dirección de correo electrónico
    4. +
    5. Haz clic en el enlace de verificación enviado a tu bandeja de entrada
    6. +
    7. Crea tu primer dossier
    8. +
    9. ¡Comienza a registrar!
    10. +
    +

    No hay contraseñas que recordar - usamos verificación de correo electrónico segura.

    +

    No se requiere tarjeta de crédito durante el período gratis.

    +
    +
    + + +
    +
    +

    Ganancias rápidas:

    +
      +
    1. Medicamentos actuales - Obtén verificación de interacciones de medicamentos con IA
    2. +
    3. Resultados de laboratorio recientes - Sube el PDF de tu último análisis de sangre
    4. +
    5. Línea base de signos vitales - Presión arterial, peso, frecuencia cardíaca en reposo
    6. +
    7. Síntomas si tienes - Ayuda a establecer patrones
    8. +
    +

    Con el tiempo:

    +
      +
    1. Sube datos genómicos si los tienes (23andMe, Ancestry)
    2. +
    3. Registra período/ejercicio/alimentos según corresponda
    4. +
    5. Agrega historial familiar para contexto
    6. +
    7. Sube imágenes médicas para condiciones complejas
    8. +
    +

    Comienza simple - siempre puedes agregar más después.

    +
    +
    + + +
    +
    +

    Instantáneamente. La carga toma aproximadamente 30 segundos (el archivo es ~20MB), luego el análisis se completa en segundos. Los resultados aparecen inmediatamente - sin esperar, sin necesidad de notificación por correo.

    +
    +
    + + +
    +
    +

    , pero depende del formato:

    +
      +
    • PDFs: Sube directamente (laboratorios, informes de imágenes, notas del médico)
    • +
    • Registros en papel: Toma fotos, sube a través de la app móvil
    • +
    • CDs de radiología: Los archivos DICOM funcionan nativamente
    • +
    • Portales (MyChart, etc.): Descarga manual, luego sube
    • +
    +

    Estamos trabajando en integraciones directas con Epic, Cerner y otros sistemas EHR.

    +
    +
    + + +
    +
    +

    Claude Desktop:

    +
      +
    1. Descarga el puente MCP de inou desde tu panel
    2. +
    3. Haz doble clic en el archivo .mcpb para instalar
    4. +
    5. Reinicia Claude Desktop
    6. +
    7. Haz preguntas de salud a Claude - ¡ahora tiene acceso a tu dossier!
    8. +
    +

    Grok:

    +

    Grok se conecta directamente vía API. Ve a tu panel, genera un token de API y agrégalo a la configuración de Grok.

    +

    Guías de configuración detalladas: inou.com/connect

    +
    +
    +
    +
    + + +
    +
    +

    ¿Aún Tienes Preguntas?

    +

    Somos un pequeño equipo construyendo algo en lo que creemos. Si tienes preguntas, ideas o retroalimentación - queremos escucharla.

    +

    + Escríbenos: support@inou.com +

    +
    +
    + + {{template "footer"}} +
    +{{end}} \ No newline at end of file diff --git a/portal/templates/faq_nl.tmpl b/portal/templates/faq_nl.tmpl new file mode 100644 index 0000000..caf6294 --- /dev/null +++ b/portal/templates/faq_nl.tmpl @@ -0,0 +1,1097 @@ +{{define "faq_nl"}} + + +
    +
    +
    +

    Veelgestelde Vragen

    +

    Alles wat je moet weten over inou health

    +
    +
    + + +
    +
    +
    +
    + Prijzen & Abonnementen + 7 vragen +
    +
    +
    + +
    +
    +

    Monitor (Gratis)

    +
      +
    • Volg vitale waarden, menstruatie/vruchtbaarheid, beweging, symptomen en voeding
    • +
    • Tekst- en spraakinvoer
    • +
    • Tot 4 dossiers (familieleden)
    • +
    • 100MB opslagruimte
    • +
    • MCP-integratie met beperkte AI-inzichten
    • +
    • Perfect voor basis health-tracking
    • +
    +

    Optimize ($12/maand of $120/jaar)

    +
      +
    • Alles van Monitor, plus:
    • +
    • Foto-uploads met OCR
    • +
    • Supplementen & medicatie tracking
    • +
    • Familiegeschiedenis
    • +
    • Laboratoriumresultaten tracking
    • +
    • Consumentengenoomanalyse (~160 geselecteerde varianten voor farmacogenomica, ziekterisico's, methylatie, atletische prestaties, voeding, persoonlijkheidskenmerken en fysieke kenmerken)
    • +
    • Volledige AI-inzichten, trendanalyse, voorspellingen en gezondheidscorrelaties
    • +
    • 1GB opslagruimte
    • +
    • Tot 4 dossiers
    • +
    +

    Research ($35/maand of $350/jaar)

    +
      +
    • Alles van Optimize, plus:
    • +
    • Medische beeldvorming (MRI, CT, röntgenfoto's)
    • +
    • Complete genoomanalyse (alle 5.000+ varianten van SNPedia)
    • +
    • Ondersteuning voor klinische genoomsequencing
    • +
    • Doorzoek elke genetische variant
    • +
    • 100GB opslagruimte (beeldbestanden zijn groot)
    • +
    • Tot 4 dossiers
    • +
    +
    +
    + + +
    +
    +

    Bij jaarabonnementen betaal je voor 10 maanden - je krijgt 2 maanden gratis:

    +
      +
    • Optimize: $120/jaar in plaats van $144 (bespaar $24)
    • +
    • Research: $350/jaar in plaats van $420 (bespaar $70)
    • +
    +
    +
    + + +
    +
    +

    inou is in actieve ontwikkeling. Als je je nu aanmeldt:

    +
      +
    • Geen kosten tot 1 juli 2026 - gebruik elk betaald abonnement helemaal gratis
    • +
    • Geen automatische verlenging op 1 juli 2026 - we vragen of je wilt doorgaan
    • +
    • Geen creditcard nodig tijdens vroege toegang - meld je aan en begin direct
    • +
    • Kies ervoor om door te gaan met een betaald abonnement of op het gratis Monitor-niveau te blijven na 1 juli
    • +
    +

    Dit geeft je 6+ maanden om inou te proberen met volledige toegang tot Optimize of Research functies voordat je besluit of je wilt betalen.

    +
    +
    + + +
    +
    +

    Ja, je kunt je abonnement altijd wijzigen:

    +
      +
    • Upgraden: Gaat direct in, je krijgt meteen toegang tot nieuwe functies
    • +
    • Downgraden: Gaat in aan het einde van je huidige facturatieperiode
    • +
    • Gegevensbehoud: Je gegevens worden nooit verwijderd bij downgraden - functies worden alleen read-only tot je weer upgrade
    • +
    +

    Bijvoorbeeld, als je downgradet van Optimize naar Monitor, blijven je labresultaten en genoomgegevens opgeslagen, maar je verliest de AI-analysefuncties tot je weer upgrade.

    +
    +
    + + +
    +
    +
      +
    • Monitor (100MB): Je ontvangt een melding wanneer je 80% en 95% van je limiet bereikt. Bij 100% kun je geen nieuwe gegevens toevoegen tot je upgrade of oude items verwijdert.
    • +
    • Optimize (1GB): Hetzelfde meldingssysteem. 1GB is goed voor ongeveer 1.000 lab-PDF's of 50 consumentengenoombestanden.
    • +
    • Research (100GB): Ontworpen voor medische beeldvorming. 100GB is goed voor ongeveer 200-400 MRI/CT-studies afhankelijk van het aantal series.
    • +
    +

    We rekenen geen overschrijdingskosten. Als je meer opslag nodig hebt, moet je upgraden naar het volgende niveau of je bestaande gegevens beheren.

    +
    +
    + + +
    +
    +

    Ja! Alle niveaus omvatten tot 4 dossiers. Een "dossier" is een individueel gezondheidsprofiel. Dit betekent dat je:

    +
      +
    • Je kunt je eigen gezondheid plus die van 3 familieleden volgen (partner, kinderen, ouders)
    • +
    • De medische dossiers van je kind kunt beheren
    • +
    • Een ouder kunt helpen met het bijhouden van medicijnen en afspraken
    • +
    • Je afzonderlijke profielen kunt aanhouden voor complexe gezondheidssituaties
    • +
    +

    Elk dossier heeft zijn eigen gegevens, machtigingen en privacy-instellingen. Familieleden kunnen hun eigen inlogtoegang hebben of je kunt alles vanuit je account beheren.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + Functies & Mogelijkheden + 7 vragen +
    +
    +
    + +
    +
    +

    Alle niveaus:

    +
      +
    • Vitale waarden: bloeddruk, hartslag, gewicht, temperatuur, zuurstofsaturatie
    • +
    • Menstruatie/vruchtbaarheid: cyclustijden, flow, symptomen, basale lichaamstemperatuur, cervixslijm
    • +
    • Beweging: type, duur, intensiteit, routes, prestatiegegevens
    • +
    • Symptomen: hoofdpijn, pijn, vermoeidheid, spijsverteringsproblemen, stemming, slaapkwaliteit
    • +
    • Voeding: maaltijdregistratie via tekst, spraak of foto
    • +
    +

    Optimize & Research voegen toe:

    +
      +
    • Supplementen & medicatie: dosering, timing, herhaalrecepten, interacties
    • +
    • Familiegeschiedenis: genetische aandoeningen, ziektepatronen
    • +
    • Laboratoriumresultaten: bloedonderzoek, panels, biomarkers met trendtracking
    • +
    • Consumentengenoom: 23andMe, AncestryDNA of vergelijkbare testresultaten
    • +
    +

    Research-niveau voegt toe:

    +
      +
    • Medische beeldvorming: MRI, CT, röntgenfoto's (DICOM-formaat)
    • +
    • Klinische genoomsequencing: whole exome, whole genome, genpanels
    • +
    +
    +
    + + +
    +
    +

    Dit is wat inou anders maakt.

    +

    Een enkele MRI kan duizenden afbeeldingen bevatten over meerdere sequenties (T1, T2, FLAIR, etc.). Ze allemaal uploaden naar een AI-chat is onpraktisch - je zou contextlimieten bereiken en tijd verspillen met handmatig selecteren van slices.

    +

    inou lost dit op:

    +
      +
    • Upload je hele scan één keer (we verwerken DICOM native)
    • +
    • Je AI ziet de studie-metadata - welke sequenties er zijn, hoeveel slices, anatomische posities
    • +
    • Bij het analyseren vraagt de AI precies de slices die het nodig heeft
    • +
    • Het kan specifieke afbeeldingen op afroep ophalen: "toon me axiale T2 slice 45" of "vergelijk sagittale FLAIR op L4-L5"
    • +
    +

    De AI navigeert intelligent door je beeldbibliotheek zonder dat je handmatig individuele afbeeldingen hoeft te zoeken en uploaden. Vraag naar een hernia, en het haalt de relevante wervelkolomsequenties op. Vraag naar een hersenlaesie, en het haalt de juiste FLAIR-slices op.

    +

    Voorbeeld: "Kijk naar mijn lumbale MRI van mei 2024 en vertel me of er verandering is ten opzichte van mijn scan van januari 2023" - de AI haalt automatisch de relevante slices uit beide studies op en vergelijkt ze.

    +
    +
    + + +
    +
    +

    Voor Optimize ($12/maand):

    +

    Upload je ruwe databestand van 23andMe, AncestryDNA of vergelijkbare consumententests. inou analyseert ~160 zorgvuldig geselecteerde, hoogwaardige genetische varianten:

    +
      +
    • Farmacogenomica (40 varianten): Welke medicijnen het beste werken voor jouw genetica (statines, bloedverdunners, antidepressiva, pijnstillers)
    • +
    • Ziekterisico (30 varianten): BRCA1/2, APOE (Alzheimer), Lynch-syndroom, familiaire hypercholesterolemie, stollingsstoornissen
    • +
    • Methylatie & ontgifting (10 varianten): MTHFR, CBS, MTR - beïnvloedt folaatmetabolisme, B12-behoefte, homocysteïne
    • +
    • Atletische prestaties (20 varianten): Spiervezeltype, VO2max-potentieel, letselrisico, herstelsnelheid
    • +
    • Voeding (20 varianten): Lactose-intolerantie, cafeïnemetabolisme, alcoholflush, vitaminebehoeften
    • +
    • Persoonlijkheid & kenmerken (20 varianten): COMT (stressrespons), slaapchronotype, pijngevoeligheid
    • +
    • Fysieke kenmerken (20 varianten): oogkleur, haarstructuur, oorsmeertype, bittere smaak
    • +
    +

    Voor Research ($35/maand):

    +

    Bovenstaande PLUS toegang tot alle 5.000+ varianten geanalyseerd door SNPedia, inclusief:

    +
      +
    • Zeldzame ziektevarianten
    • +
    • Onzekere/vroege onderzoeksbevindingen
    • +
    • Polygenetische risicoscores voor 50+ aandoeningen
    • +
    • Dragerstatus voor 200+ recessieve aandoeningen
    • +
    • Zoek op elke rsID of gen
    • +
    • Klinische genoomsequencing data (WES/WGS)
    • +
    +

    Privacycontrole: Je kiest of je beschermende varianten (goed nieuws), risicovarianten (slecht nieuws) of beide wilt tonen. Sommige mensen willen uitgebreide informatie; anderen geven er de voorkeur aan om risico's die ze niet kunnen controleren niet te zien.

    +
    +
    + + +
    +
    +

    inou verbindt AI-assistenten zoals Claude en Grok direct met je gezondheidsgegevens. In plaats van handmatig informatie te kopiëren en plakken, kan je AI:

    +
      +
    • Je volledige medische geschiedenis lezen
    • +
    • Trends analyseren over vitale waarden, labs, symptomen
    • +
    • Genoomgegevens correleren met medicatie-responsen
    • +
    • Vragen beantwoorden met JOUW specifieke gezondheidsgegevens
    • +
    +

    Hoe het werkt:

    +
      +
    1. Verbind je AI met inou (Claude via MCP-bridge, Grok via API)
    2. +
    3. Stel gezondheidsvragen op een natuurlijke manier: "Waarom heb ik hoofdpijn?" of "Is deze medicatie veilig voor mijn genoom?"
    4. +
    5. AI ziet je relevante gegevens en geeft gepersonaliseerde antwoorden
    6. +
    7. Gegevens verlaten inou nooit permanent - AI bevraagt ze in realtime
    8. +
    +

    Monitor-niveau: MCP werkt, maar AI heeft beperkte gegevens (geen labs/genoom), dus inzichten zijn basis

    +

    Optimize/Research: Volledige AI-mogelijkheden met volledige gezondheidscontext

    +
    +
    + + +
    +
    +

    Momenteel ondersteund:

    +
      +
    • Laboratoriumresultaten: PDF-upload met OCR
    • +
    • Genoom: 23andMe, AncestryDNA ruwe databestanden
    • +
    • Medische beeldvorming: DICOM-bestanden van radiologie
    • +
    • Foto's: Medicijnflesjes, voeding, gezondheidsdocumenten
    • +
    +

    Binnenkort beschikbaar:

    +
      +
    • Apple Health / HealthKit-integratie
    • +
    • Google Fit-integratie
    • +
    • Wearables (Garmin, Oura, Whoop)
    • +
    • MyChart / Epic-integratie
    • +
    • Directe import van laboratoria
    • +
    +

    Je kunt ook handmatig gegevens invoeren via tekst of spraak voor alles wat nog niet geautomatiseerd is.

    +
    +
    + + +
    +
    +

    Nee. inou is een tool voor het organiseren van je gezondheidsgegevens en het inschakelen van AI om je te helpen het te begrijpen. Het is GEEN:

    +
      +
    • Diagnostisch hulpmiddel
    • +
    • Vervanging voor medisch advies
    • +
    • Behandelingsaanbevelingssysteem
    • +
    • Receptenservice
    • +
    +

    inou helpt je:

    +
      +
    • Je gezondheid uitgebreid bijhouden
    • +
    • Patronen en trends begrijpen
    • +
    • Communiceren met je arts (rapporten exporteren voor afspraken)
    • +
    • Je aandoeningen onderzoeken met AI en je persoonlijke context
    • +
    • Medicatie en symptomen beheren
    • +
    +

    Raadpleeg altijd je zorgverlener voor medische beslissingen. Denk aan inou als je gezondheidsdata-infrastructuur - het maakt je een beter geïnformeerde patiënt, maar je arts neemt de klinische beslissingen.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + Gratis Periode & Vroege Toegang + 5 vragen +
    +
    +
    + +
    +
    +

    We zijn in actieve ontwikkeling en willen dat vroege gebruikers:

    +
      +
    1. Functies testen en feedback geven terwijl we het product verfijnen
    2. +
    3. Hun gezondheidsgegevens opbouwen zonder zich zorgen te maken over kosten
    4. +
    5. De volledige waarde ervaren voordat ze een abonnement afsluiten
    6. +
    7. Ons helpen verbeteren door bugs te melden en functies voor te stellen
    8. +
    +

    Vroege adopters zijn ongelooflijk waardevol. Deze gratis periode is onze manier om te zeggen dat we het waarderen dat je deel uitmaakt van deze reis.

    +
    +
    + + +
    +
    +

    We nemen contact met je op voor 1 juli om te vragen of je wilt doorgaan:

    +
      +
    • Doorgaan met betaald abonnement: Abonneer je tegen de huidige prijzen (prijzen zijn vergrendeld voor vroege gebruikers)
    • +
    • Downgraden naar Monitor (Gratis): Blijf de basisfuncties voor altijd gratis gebruiken
    • +
    • Exporteren en vertrekken: Download al je gegevens en annuleer
    • +
    +

    Belangrijk: Je abonnement wordt NIET automatisch verlengd. We zullen je nooit kosten in rekening brengen zonder expliciete bevestiging. Geen verrassingen, geen verborgen facturatie.

    +
    +
    + + +
    +
    +

    Voor vroege gebruikers die zich aanmelden tijdens de gratis periode:

    +
      +
    • Prijsvergrendeling: Als je je na 1 juli abonneert, betaal je 2026-prijzen zelfs als we ze later verhogen
    • +
    • Voor altijd gegarandeerd: Zolang je een doorlopend abonnement hebt, stijgt je tarief nooit
    • +
    • Voorbeeld: Als je je in juli 2026 abonneert voor $12/maand en we de prijzen verhogen naar $15/maand in 2027, betaal je nog steeds $12/maand
    • +
    +

    Nieuwe gebruikers na juli 2026 betalen wat de actuele prijzen op dat moment zijn.

    +
    +
    + + +
    +
    +

    Nee - bouw één uitgebreid dossier met zoveel mogelijk informatie. Hoe meer gegevens je AI tot zijn beschikking heeft, hoe betere inzichten het kan geven.

    +

    Je kunt meerdere dossiers aanmaken onder verschillende e-mailadressen, maar er is geen voordeel om je gezondheidsgegevens te splitsen. Houd alles op één plek voor de beste AI-ervaring.

    +

    Gebruik aparte dossiers voor familieleden, niet voor jezelf.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + Betaling & Facturatie + 5 vragen +
    +
    +
    + +
    +
    +
      +
    • Creditcards (Visa, Mastercard, American Express, Discover)
    • +
    • Debitcards
    • +
    • Digitale portemonnees (Apple Pay, Google Pay)
    • +
    • ACH-bankoverschrijvingen (alleen jaarabonnementen)
    • +
    +

    Binnenkort beschikbaar: PayPal, Venmo

    +
    +
    + + +
    +
    +

    Nee. Betalingsverwerking wordt afgehandeld door Stripe, een gecertificeerde PCI Service Provider Level 1 (de hoogste beveiligingsstandaard). We zien of slaan nooit je creditcardgegevens op. Stripe regelt alle betalingsbeveiliging.

    +
    +
    + + +
    +
    +

    Maandabonnementen:

    +
      +
    • Eerste facturatie: 1 juli 2026 (of later als je je na die datum aanmeldt)
    • +
    • Herhalend: Dezelfde dag elke maand (als je je op 15 juli abonneert, wordt je op de 15e van elke maand gefactureerd)
    • +
    • Pro-rata: Als je halverwege de cyclus upgrade, wordt het pro-rata verschil direct in rekening gebracht
    • +
    +

    Jaarabonnementen:

    +
      +
    • Eerste facturatie: 1 juli 2026 (of later)
    • +
    • Herhalend: Dezelfde datum elk jaar
    • +
    • Geen tussentijdse kosten tenzij je van niveau upgrade
    • +
    +
    +
    + + +
    +
    +

    30 dagen geld-terug-garantie:

    +

    Als je je na 1 juli 2026 abonneert en niet tevreden bent, vraag dan een volledige refund aan binnen 30 dagen. Geen vragen gesteld.

    +

    Gratis periode gebruikers:

    +

    Omdat je de service maandenlang gratis hebt gebruikt voordat je je abonneerde, zijn refunds niet beschikbaar na het verstrijken van de 30-daagse garantie. Je kunt altijd annuleren om toekomstige kosten te voorkomen.

    +
    +
    + + +
    +
    +
      +
    1. Dag 1: Automatische herhaalpoging
    2. +
    3. Dag 3: E-mailmelding + herhaalpoging
    4. +
    5. Dag 7: Laatste herhaalpoging + account vergrendeld (alleen-lezen toegang)
    6. +
    7. Dag 14: Account opgeschort (geen toegang totdat betaling is opgelost)
    8. +
    9. Dag 30: Account gepland voor verwijdering
    10. +
    +

    Je gegevens worden nooit verwijderd voor 30 dagen, en we sturen meerdere meldingen. Update je betaalmethode altijd om direct toegang te herstellen.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + Annulering & Gegevens + 4 vragen +
    +
    +
    + +
    +
    +
      +
    1. Ga naar Accountinstellingen
    2. +
    3. Klik op het tabblad "Abonnement"
    4. +
    5. Klik op "Abonnement Annuleren"
    6. +
    7. Bevestig de annulering
    8. +
    +

    Gaat in:

    +
      +
    • Einde van huidige facturatieperiode (je behoudt toegang tot dan)
    • +
    • Directe downgrade naar Monitor (Gratis) niveau
    • +
    • Geen verdere kosten
    • +
    +

    Je gegevens:

    +
      +
    • Worden nooit verwijderd
    • +
    • Blijven opgeslagen en toegankelijk in alleen-lezen modus
    • +
    • Volledige toegang hersteld als je je opnieuw abonneert
    • +
    +
    +
    + + +
    +
    +

    Ja, altijd. Gewoon:

    +
      +
    1. Ga naar Accountinstellingen
    2. +
    3. Klik op "Upgraden"
    4. +
    5. Kies je abonnement en voer betalingsgegevens in
    6. +
    +

    Je gegevens zijn er nog - je hebt direct weer toegang tot alles.

    +
    +
    + + +
    +
    +

    Accountverwijdering is permanent en onmiddellijk:

    +
      +
    1. Ga naar Accountinstellingen
    2. +
    3. Klik op "Account Verwijderen"
    4. +
    5. Bevestig verwijdering (vereist dat je "DELETE" typt ter bevestiging)
    6. +
    7. Alle gegevens worden permanent vernietigd binnen 24 uur
    8. +
    +

    Voor het verwijderen:

    +
      +
    • Exporteer je gegevens (we bieden standaard formaten)
    • +
    • Download eventuele rapporten of documenten die je wilt bewaren
    • +
    • Overweeg om te annuleren (bewaart je gegevens voor toekomstig gebruik)
    • +
    +

    Na verwijdering:

    +
      +
    • Kan niet ongedaan worden gemaakt
    • +
    • Kan geen gegevens herstellen
    • +
    • Back-ups worden binnen 30 dagen verwijderd
    • +
    +
    +
    + + +
    +
    +

    Ja, altijd. Export-formaten:

    +
      +
    • Gestructureerde gegevens: JSON, CSV
    • +
    • Labs: PDF-kopieën van originele uploads
    • +
    • Genoom: Originele ruwe databestanden
    • +
    • Beeldvorming: DICOM-bestanden
    • +
    • Rapporten: PDF-samenvattingen met grafieken en trends
    • +
    +

    Export omvat alles: vitale waarden, symptomen, medicijnen, labs, genoom, beeldvorming, notities - je volledige gezondheidsdossier.

    +

    Gebruiksmogelijkheden:

    +
      +
    • Overstappen naar een andere service
    • +
    • Delen met zorgverleners
    • +
    • Persoonlijke backup
    • +
    • Onderzoek of analyse
    • +
    +

    Jij bezit je gegevens. We slaan ze alleen voor je op.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + Privacy & Beveiliging + 9 vragen +
    +
    +
    + +
    +
    +

    Servers in de Verenigde Staten met enterprise-grade infrastructuur:

    +
      +
    • Niet op Big Tech-clouds (geen Google, Amazon, Microsoft)
    • +
    • Onafhankelijke datacenters met fysieke beveiliging
    • +
    • Redundante back-ups op meerdere locaties
    • +
    • HIPAA-compatibele infrastructuur
    • +
    +

    Als je inou van buiten de VS opent, reizen je gegevens over internationale grenzen. We passen dezelfde beveiligings- en privacybescherming toe ongeacht je locatie.

    +
    +
    + + +
    +
    +

    FIPS 140-3 encryptie (Amerikaanse overheidsstandaard):

    +
      +
    • At rest: Alle bestanden versleuteld met FIPS 140-3 gevalideerde cryptografie
    • +
    • In transit: TLS 1.3 encryptie voor alle verbindingen
    • +
    • Back-ups: Versleuteld met aparte sleutels
    • +
    • Sleutelbeheer: Hardware security modules (HSM's)
    • +
    +

    Dit is dezelfde encryptiestandaard die wordt gebruikt door banken, ziekenhuizen en overheidsinstanties.

    +
    +
    + + +
    +
    +

    Alleen jij. We:

    +
      +
    • Delen nooit gegevens met adverteerders
    • +
    • Verkopen nooit gegevens aan derden
    • +
    • Gebruiken nooit gegevens om AI-modellen te trainen
    • +
    • Mijnen nooit gegevens voor onderzoek zonder expliciete toestemming
    • +
    • Verstrekken nooit gegevens aan partners of gelieerde ondernemingen
    • +
    +

    Wetshandhaving:

    +

    We voldoen aan rechtmatige verzoeken (gerechtelijke bevelen, dagvaardingen) maar niets anders. Als we een geldig juridisch verzoek ontvangen, moeten we de opgevraagde gegevens verstrekken. We zullen je informeren tenzij dit wettelijk verboden is.

    +

    Je AI:

    +

    Wanneer je AI via MCP verbindt, worden je gegevens via een versleutelde brug naar je AI-sessie verzonden. De AI verwerkt het in realtime maar slaat het niet permanent op. Raadpleeg het privacybeleid van je AI-provider voor hun gegevensverwerking.

    +
    +
    + + +
    +
    +

    Nee, behalve:

    +
      +
    • Je expliciet ondersteuning vraagt die gegevenstoegang vereist
    • +
    • Wettelijke verplichtingen (gerechtelijk bevel)
    • +
    • Onderzoek naar kritieke beveiligingsincidenten
    • +
    +

    Wanneer toegang wordt verleend:

    +
      +
    • Beperkt tot senior medewerkers
    • +
    • Geregistreerd in audit trail (zichtbaar voor jou in Accountinstellingen)
    • +
    • Tijdelijk beperkt (toegang vervalt na 24 uur)
    • +
    • Je wordt geïnformeerd wanneer toegang plaatsvindt
    • +
    +

    Willekeurige medewerkers, aannemers of ontwikkelaars hebben nooit toegang tot je gezondheidsgegevens.

    +
    +
    + + +
    +
    +

    Nooit. Je gegevens:

    +
      +
    • Worden niet gebruikt om machine learning-modellen te trainen
    • +
    • Worden niet gebruikt om AI-assistenten te verbeteren
    • +
    • Worden niet gebruikt voor onderzoek of ontwikkeling
    • +
    • Worden niet geanonimiseerd en geaggregeerd voor analyse
    • +
    +

    Als we ooit geanonimiseerde, geaggregeerde gegevens voor onderzoek willen gebruiken, zullen we:

    +
      +
    1. Om expliciete opt-in toestemming vragen
    2. +
    3. Precies uitleggen wat we bestuderen
    4. +
    5. De mogelijkheid bieden om op elk moment af te melden
    6. +
    7. Nooit identificeerbare gegevens delen
    8. +
    +
    +
    + + +
    +
    +

    Geen. We gebruiken geen:

    +
      +
    • Google Analytics
    • +
    • Meta-pixels
    • +
    • Tracking-scripts
    • +
    • Third-party cookies
    • +
    • Advertentienetwerken
    • +
    +

    Wat we wel tracken:

    +
      +
    • Eén cookie voor inlogsessie
    • +
    • IP-adressen alleen voor beveiligingslogboeken
    • +
    • Foutlogboeken voor debugging (geen persoonlijke gegevens)
    • +
    +

    We hebben geen idee waar je op klikt, waar je vandaan komt, of waar je naartoe gaat.

    +
    +
    + + +
    +
    +

    Ja. We volgen HIPAA-standaarden:

    +
      +
    • Business Associate Agreements beschikbaar voor gedekte entiteiten
    • +
    • Administratieve, fysieke en technische waarborgen
    • +
    • Meldingsprocedures bij datalekken
    • +
    • Auditcontroles en toegangslogboeken
    • +
    • Versleutelde opslag en overdracht
    • +
    +

    We voldoen ook aan:

    +
      +
    • GDPR (Europese gegevensbescherming)
    • +
    • FADP (Zwitserse gegevensbescherming)
    • +
    • CCPA (Californische consumentenprivacy)
    • +
    +

    Waar je ook woont, je krijgt ons hoogste niveau van privacybescherming.

    +
    +
    + + +
    +
    +

    Gebruikers onder 18:

    +
      +
    • Kunnen geen accounts onafhankelijk aanmaken
    • +
    • Hebben ouder/voogd autorisatie nodig
    • +
    • Ouder/voogd behoudt volledige controle
    • +
    • Kan op elk moment worden ingetrokken
    • +
    +

    Ouders/voogden kunnen:

    +
      +
    • Dossiers voor kinderen aanmaken
    • +
    • Alle gegevens en toegang beheren
    • +
    • Delen en AI-integratie controleren
    • +
    • Gegevens van kinderen op elk moment verwijderen
    • +
    +

    Minderjarigen kunnen hun gegevens niet met derden delen of AI verbinden zonder ouderlijke toestemming.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + Technisch & Ondersteuning + 6 vragen +
    +
    +
    + +
    +
    +

    Webbrowser (alle niveaus):

    +
      +
    • Chrome, Firefox, Safari, Edge
    • +
    • Desktop en mobiele browsers
    • +
    • Responsief ontwerp voor elk schermformaat
    • +
    +

    Mobiele apps (komend Q2 2026):

    +
      +
    • iOS (iPhone, iPad)
    • +
    • Android
    • +
    • Native apps met volledige feature-pariteit
    • +
    +

    Desktop apps (gepland):

    +
      +
    • macOS
    • +
    • Windows
    • +
    +
    +
    + + +
    +
    +

    Momenteel ondersteund:

    +
      +
    • Claude (Anthropic) - via MCP-bridge (.mcpb bestand)
    • +
    • Grok (xAI) - via directe API
    • +
    +

    We voegen actief meer integraties toe. Zie inou.com/connect voor de laatste lijst.

    +
    +
    + + +
    +
    +

    Meld het! We willen het weten:

    +
      +
    • E-mail: support@inou.com
    • +
    • In-app: Help → Bug Meld
    • +
    • Voeg screenshots toe als dat mogelijk is
    • +
    +

    Vroege gebruikers die bugs melden helpen ons een beter product te bouwen. We lossen kritieke problemen op binnen 24 uur en kleine problemen binnen een week.

    +
    +
    + + +
    +
    +

    Ja:

    +
      +
    • E-mailondersteuning: support@inou.com (24-48 uur reactietijd)
    • +
    • Deze FAQ-pagina
    • +
    • Installatiegidsen op inou.com/connect
    • +
    +
    +
    + + +
    +
    +

    Absoluut! E-mail features@inou.com of gebruik het in-app feedbacktool. We onderhouden een openbare roadmap en implementeren regelmatig gebruikerssuggesties.

    +

    Vroege gebruikers hebben aanzienlijke invloed op de productrichting - als genoeg mensen een functie willen, geven we er prioriteit aan.

    +
    +
    + + +
    +
    +

    We verplichten ons tot:

    +
      +
    • 90 dagen voorafgaande kennisgeving
    • +
    • Exporttools voor alle gegevens
    • +
    • Aanbevelingen voor alternatieve diensten
    • +
    • Mogelijkheid om je gegevens zelf te hosten
    • +
    +

    Bij overname worden je gegevens:

    +
      +
    • Overgedragen onder dezelfde privacyvoorwaarden, OF
    • +
    • Krijg je de mogelijkheid om te exporteren en te verwijderen
    • +
    +

    We zullen nooit gebruikersgegevens verkopen als onderdeel van een overname. Het zijn jouw gegevens, niet ons bezit.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + Aan de Slag + 5 vragen +
    +
    +
    + +
    +
    +
      +
    1. Ga naar inou.com
    2. +
    3. Voer je e-mailadres in
    4. +
    5. Klik op de verificatielink die naar je inbox is gestuurd
    6. +
    7. Maak je eerste dossier
    8. +
    9. Begin met bijhouden!
    10. +
    +

    Geen wachtwoorden om te onthouden - we gebruiken veilige e-mailverificatie.

    +

    Geen creditcard nodig tijdens de gratis periode.

    +
    +
    + + +
    +
    +

    Snelle winsten:

    +
      +
    1. Huidige medicijnen - Krijg AI-controle op medicijninteracties
    2. +
    3. Recente labresultaten - Upload je laatste bloedonderzoek-PDF
    4. +
    5. Vitale basislijn - Bloeddruk, gewicht, rustende hartslag
    6. +
    7. Symptomen als je die hebt - Helpt patronen vast te stellen
    8. +
    +

    Na verloop van tijd:

    +
      +
    1. Upload genoomgegevens als je die hebt (23andMe, Ancestry)
    2. +
    3. Volg menstruatie/beweging/voeding als relevant
    4. +
    5. Voeg familiegeschiedenis toe voor context
    6. +
    7. Upload medische beeldvorming voor complexe aandoeningen
    8. +
    +

    Begin simpel - je kunt altijd later meer toevoegen.

    +
    +
    + + +
    +
    +

    Direct. Upload duurt ongeveer 30 seconden (bestand is ~20MB), dan is de analyse binnen enkele seconden klaar. Resultaten verschijnen direct - geen wachten, geen e-mailmelding nodig.

    +
    +
    + + +
    +
    +

    Ja, maar het hangt af van het formaat:

    +
      +
    • PDF's: Upload direct (labs, beeldverslagen, artsnotities)
    • +
    • Papieren dossiers: Maak foto's, upload via mobiele app
    • +
    • CD's van radiologie: DICOM-bestanden werken native
    • +
    • Portals (MyChart, etc.): Handmatig downloaden, dan uploaden
    • +
    +

    We werken aan directe integraties met Epic, Cerner en andere EHR-systemen.

    +
    +
    + + +
    +
    +

    Claude Desktop:

    +
      +
    1. Download de inou MCP-bridge van je dashboard
    2. +
    3. Dubbelklik op het .mcpb bestand om te installeren
    4. +
    5. Herstart Claude Desktop
    6. +
    7. Stel Claude gezondheidsvragen - het heeft nu toegang tot je dossier!
    8. +
    +

    Grok:

    +

    Grok verbindt direct via API. Ga naar je dashboard, genereer een API-token en voeg het toe aan Grok's instellingen.

    +

    Gedetailleerde installatiegidsen: inou.com/connect

    +
    +
    +
    +
    + + +
    +
    +

    Nog Vragen?

    +

    We zijn een klein team dat iets bouwt waar we in geloven. Als je vragen, ideeën of feedback hebt - we willen het horen.

    +

    + Email ons: support@inou.com +

    +
    +
    + + {{template "footer"}} +
    +{{end}} diff --git a/portal/templates/landing_de.tmpl b/portal/templates/landing_de.tmpl index 430682d..68dc45e 100644 --- a/portal/templates/landing_de.tmpl +++ b/portal/templates/landing_de.tmpl @@ -1,121 +1,519 @@ {{define "landing_de"}} +
    +
    -
    inou organisiert und teilt Ihre Gesundheitsakte mit Ihrer KI — sicher und privat.
    -
    Ihre Gesundheit, verstanden.
    -
    {{if .Dossier}}Freund einladen{{else}}Anmelden{{end}}{{if .Error}}
    {{.Error}}
    {{end}}
    +
    Deine Gesundheit, verstanden.
    +
    Alle deine Gesundheitsdaten — organisiert, privat und bereit für deine KI.
    + + + +
    + {{if .Dossier}}Einen Freund einladen{{else}}Einloggen{{end}} + {{if .Error}}
    {{.Error}}
    {{end}} +
    +
    -

    Sie brauchen KI für Ihre Gesundheit

    +

    Du brauchst KI für deine Gesundheit

    +
    -

    Ihre Gesundheitsdaten sind über Dutzende von Orten verstreut — bei Ihrem Kardiologen, Ihrem Neurologen, im Labor, in Ihrer Smartwatch, Ihren Apps, Ihrem 23andMe. Und nur Sie kennen den Rest: was Sie essen, was Sie trinken, welche Nahrungsergänzungsmittel Sie nehmen. Ihr Trainingsplan. Ihre Symptome. Ihre Ziele — ob Sie schwanger werden möchten, für einen Marathon trainieren oder einfach weniger müde sein wollen.

    -

    Ob Sie gesund sind und es bleiben wollen, mit einer schwierigen Diagnose kämpfen oder sich um ein Familienmitglied kümmern, das sich nicht selbst vertreten kann — kein einzelner Arzt sieht das vollständige Bild. Kein System verbindet alles.

    -

    Aber Sie haben Zugang zu allem. Ihnen fehlt nur die Expertise, um alles zu verstehen.

    -

    Ihre KI hat sie. inou gibt ihr das vollständige Bild.

    +

    Deine Gesundheitsdaten leben an einem Dutzend verschiedenen Orten — bei deinem Kardiologen, deinem Neurologen, deinem Labor, deiner Uhr, deinen Apps, deinem 23andMe. Und nur du kennst den Rest: was du isst, was du trinkst, welche Nahrungsergänzungsmittel du einnimmst. Deine Trainingsroutine. Deine Symptome. Deine Ziele — ob du versuchst schwanger zu werden, dich auf einen Marathon vorzubereiten oder einfach nur weniger erschöpft zu fühlen.

    + +

    Ob du gesund bist und so bleiben willst, eine schwierige Diagnose durchläufst oder dich um ein Familienmitglied kümmerst, das sich nicht selbst vertreten kann — kein einziger Arzt sieht das komplette Bild. Kein System verbindet es.

    + +

    Aber du hast Zugriff auf alles. Du hast einfach nicht die Expertise, um alles zu verstehen.

    + +

    Deine KI macht es. inou gibt dir das komplette Bild.

    Die Herausforderung

    -
    Ihr MRT hat 4.000 Schichten.
    Es wurde in 10 Minuten ausgewertet.
    -
    Ihr Genom hat Millionen von Varianten.
    Sie haben nur Ihre Augenfarbe und Ihre Herkunft erfahren.
    -
    Ihr Blutbild hat Dutzende von Markern.
    Ihr Arzt sagte "alles sieht gut aus."
    -
    Ihre Uhr hat 10.000 Stunden Schlaf aufgezeichnet.
    Ihr Trainer weiß nicht, dass sie existiert.
    -
    Sie haben hundert verschiedene Nahrungsergänzungsmittel ausprobiert.
    Niemand hat gefragt, welche.
    -
    Die Verbindungen sind da.
    Sie sind nur zu komplex für eine einzelne Person.
    +
    +
    Deine MRT hat 4.000 Schichten.
    +
    Es wurde in 10 Minuten gelesen.
    +
    + +
    +
    Dein Genom hat Millionen von Varianten.
    +
    Alles, was du gelernt hast, war deine Augenfarbe und wo deine Vorfahren herkommen.
    +
    + +
    +
    Deine Blutuntersuchung hat Dutzende von Markern.
    +
    Dein Arzt sagte: 'Alles sieht gut aus.'
    +
    + +
    +
    Deine Uhr hat 10.000 Stunden Schlaf aufgezeichnet.
    +
    Dein Trainer weiß nicht, dass es existiert.
    +
    + +
    +
    Du hast einhundert verschiedene Nahrungsergänzungsmittel ausprobiert.
    +
    Niemand hat gefragt, welche.
    +
    + +
    + Die Verbindungen sind da.
    + Sie sind einfach zu komplex, damit eine Person sie erfassen kann. +
    +
    - Niemand weiß, wie Ihr Körper Warfarin verarbeitet — nicht einmal Sie. - Aber die Antwort könnte bereits in Ihrem 23andMe versteckt sein. - Dieses "unauffällig" in Ihrem MRT — hat jemand wirklich alle 4.000 Schichten genau angesehen? - Ihre Schilddrüse ist "im Normbereich" — aber niemand hat sie mit Ihrer Müdigkeit, Ihrem Gewicht, dass Ihnen immer kalt ist, verbunden. + Niemand weiß, wie dein Körper Warfarin verarbeitet — nicht einmal du. + Aber die Antwort könnte bereits in deinem 23andMe versteckt sein. + Das 'unauffällige' auf deiner MRT — hat jemand alle 4.000 Schichten genau betrachtet? + Deine Schilddrüse ist 'im Bereich' — aber niemand hat es mit deiner Müdigkeit, deinem Gewicht, ständigem Kältegefühl verbunden.
    +
    - Niemand verbindet Ihren Nachmittagskaffee mit Ihrer Schlafqualität. - Ihren Eisenspiegel mit Ihrer Trainingsmüdigkeit. - Ihre Genetik mit Ihrem Gehirnnebel. + Niemand verbindet deinen Nachmittagscafé mit deinen Schlafwerten. + Deine Eisenwerte mit deiner Trainingsmüdigkeit. + Deine Genetik mit deinem Gehirnnebel.
    +
    - Ihre KI vergisst nicht. - Hetzt nicht. - Findet, was übersehen wurde. - Spezialisiert sich nicht — sieht Sie als Ganzes. + Deine KI vergisst nicht. + Eilt nicht. + Findet, was verpasst wurde. + Spezialisiert sich nicht — sieht das komplette du.
    -
    inou lässt Ihre KI alles berücksichtigen — jede Schicht, jeden Marker, jede Variante — verbindet alles und gibt Ihnen endlich Antworten, die niemand sonst geben konnte.
    + +
    inou lässt deine KI alles berücksichtigen — jede Schicht, jeden Marker, jede Variante — verbindet alles und gibt dir endlich Antworten, die sonst niemand geben könnte.
    + +

    Warum wir das gebaut haben

    -

    Sie haben jahrelang Gesundheitsdaten gesammelt. Scans aus dem Krankenhaus. Blutwerte aus dem Labor. Ergebnisse aus dem Patientenportal. Daten von Ihrer Uhr. Vielleicht sogar Ihre DNA.

    -

    Und dann gibt es alles, was nur Sie wissen — Ihr Gewicht, Ihr Blutdruck, Ihr Trainingsplan, die Nahrungsergänzungsmittel, die Sie nehmen, die Symptome, die Sie immer vergessen zu erwähnen.

    -

    Es ist alles da — aber verstreut über Systeme, die nicht miteinander kommunizieren, bei Spezialisten, die nur ihren Teil sehen, oder in Ihrem eigenen Kopf eingeschlossen.

    -

    Ihr Kardiologe weiß nicht, was Ihr Neurologe gefunden hat. Ihr Trainer hat Ihre Blutwerte nicht gesehen. Ihr Arzt hat keine Ahnung, welche Nahrungsergänzungsmittel Sie nehmen. Und keiner von ihnen hat Zeit, sich mit Ihnen hinzusetzen und die Punkte zu verbinden.

    -

    KI kann das endlich. Sie kann zusammenführen, was kein einzelner Experte sieht — und es Ihnen auch noch erklären.

    -

    Aber diese Daten passen nicht in ein Chat-Fenster. Und das Letzte, was Sie wollen, ist Ihre Krankengeschichte auf fremden Servern, die deren Modelle trainiert.

    -

    inou bringt alles zusammen — Labor, Bildgebung, Genetik, Vitalwerte, Medikamente, Nahrungsergänzungsmittel — verschlüsselt, privat und mit niemandem geteilt. Ihre KI verbindet sich sicher. Ihre Daten bleiben Ihre.

    -
    Ihre Gesundheit, verstanden.
    + +

    Du hast Jahre an Gesundheitsdaten gesammelt. Scans aus dem Krankenhaus. Blutuntersuchungen aus dem Labor. Ergebnisse aus dem Portal deines Arztes. Daten von deiner Uhr. Vielleicht sogar dein DNA.

    + +

    Und dann gibt es alles, was nur du kennst — dein Gewicht, dein Blutdruck, dein Trainingsplan, die Nahrungsergänzungsmittel, die du einnimmst, die Symptome, die du erwähnen wolltest.

    + +

    Alles ist da — aber verteilt über Systeme, die nicht miteinander kommunizieren, von Spezialisten gehalten, die nur ihr Stück sehen, oder in deinem eigenen Kopf verankert.

    + +

    Dein Kardiologe weiß nicht, was dein Neurologe gefunden hat. Dein Trainer hat deine Blutuntersuchung nicht gesehen. Dein Arzt hat keine Ahnung, welche Nahrungsergänzungsmittel du einnimmst. Und keiner von ihnen hat Zeit, mit dir zu sitzen und die Punkte zu verbinden.

    + +

    KI kann endlich. Sie kann zusammenziehen, was kein einziger Experte sieht — und es dir tatsächlich erklären.

    + +

    Aber diese Daten passen nicht in ein Chatfenster. Und das Letzte, was du willst, ist deine medizinische Vorgeschichte auf fremden Servern, die ihre Modelle trainieren.

    + +

    inou bringt alles zusammen — Labore, Bildgebung, Genetik, Vitalwerte, Medikamente, Nahrungsergänzungsmittel — verschlüsselt, privat und mit absolut niemandem geteilt. Deine KI verbindet sich sicher. Deine Daten bleiben deine.

    + +
    Deine Gesundheit, verstanden.
    +
    -
    {{.T.never_training}}{{.T.never_training_desc}}
    -
    {{.T.never_shared}}{{.T.never_shared_desc}}
    -
    {{.T.encrypted}}{{.T.encrypted_desc}}
    -
    {{.T.delete}}{{.T.delete_desc}}
    +
    + {{.T.never_training}} + {{.T.never_training_desc}} +
    +
    + {{.T.never_shared}} + {{.T.never_shared_desc}} +
    +
    + {{.T.encrypted}} + {{.T.encrypted_desc}} +
    +
    + {{.T.delete}} + {{.T.delete_desc}} +
    - + + {{template "footer"}} +
    -{{end}} + +{{end}} \ No newline at end of file diff --git a/portal/templates/landing_es.tmpl b/portal/templates/landing_es.tmpl index 525d4d6..fcc8d0e 100644 --- a/portal/templates/landing_es.tmpl +++ b/portal/templates/landing_es.tmpl @@ -1,121 +1,519 @@ {{define "landing_es"}} +
    +
    -
    inou organiza y comparte tu expediente de salud con tu IA — de forma segura y privada.
    -
    Tu salud, comprendida.
    -
    {{if .Dossier}}Invitar a un amigo{{else}}Iniciar sesión{{end}}{{if .Error}}
    {{.Error}}
    {{end}}
    +
    Tu salud, entendida.
    +
    Todos tus datos de salud — organizados, privados y listos para tu IA.
    + + + +
    + {{if .Dossier}}Invita a un amigo{{else}}Iniciar sesión{{end}} + {{if .Error}}
    {{.Error}}
    {{end}} +
    +

    Necesitas IA para tu salud

    +
    -

    Tus datos de salud están dispersos en docenas de lugares — con tu cardiólogo, tu neurólogo, el laboratorio, tu reloj inteligente, tus apps, tu 23andMe. Y solo tú conoces el resto: qué comes, qué bebes, qué suplementos tomas. Tu rutina de ejercicio. Tus síntomas. Tus objetivos — ya sea que estés intentando quedar embarazada, entrenando para un maratón, o simplemente tratando de sentirte menos cansado.

    -

    Ya sea que estés sano y quieras seguir así, navegando un diagnóstico difícil, o cuidando a un familiar que no puede defenderse solo — ningún médico ve el panorama completo. Ningún sistema lo conecta.

    -

    Pero tú tienes acceso a todo. Solo te falta la experiencia para entenderlo todo.

    -

    Tu IA la tiene. inou le da el panorama completo.

    +

    Tus datos de salud viven en una docena de lugares diferentes — con tu cardiólogo, tu neurólogo, tu laboratorio, tu reloj, tus aplicaciones, tu 23andMe. Y solo tú conoces el resto: lo que comes, lo que bebes, los suplementos que tomas. Tu rutina de ejercicio. Tus síntomas. Tus objetivos — ya sea que estés intentando quedar embarazada, entrenando para un maratón, o simplemente tratando de sentirte menos agotado.

    + +

    Ya sea que estés sano y quieras mantenerte así, navegando un diagnóstico difícil, o cuidando a un familiar que no puede defenderse — ningún médico ve la imagen completa. Ningún sistema lo conecta.

    + +

    Pero tienes acceso a todo ello. Simplemente no tienes la experiencia para darle sentido.

    + +

    Tu IA sí la tiene. inou le da la imagen completa.

    El desafío

    -
    Tu resonancia tiene 4.000 cortes.
    Se leyó en 10 minutos.
    -
    Tu genoma tiene millones de variantes.
    Solo aprendiste el color de tus ojos y de dónde vienen tus ancestros.
    -
    Tu análisis de sangre tiene docenas de marcadores.
    Tu médico dijo "todo se ve bien."
    -
    Tu reloj registró 10.000 horas de sueño.
    Tu entrenador no sabe que existe.
    -
    Has probado cien suplementos diferentes.
    Nadie preguntó cuáles.
    -
    Las conexiones están ahí.
    Son demasiado complejas para una sola persona.
    +
    +
    Tu resonancia magnética tiene 4,000 cortes.
    +
    Fue leída en 10 minutos.
    +
    + +
    +
    Tu genoma tiene millones de variantes.
    +
    Lo único que aprendiste fue el color de tus ojos y de dónde vienen tus antepasados.
    +
    + +
    +
    Tu análisis de sangre tiene docenas de marcadores.
    +
    Tu médico dijo "todo está bien".
    +
    + +
    +
    Tu reloj rastreó 10,000 horas de sueño.
    +
    Tu entrenador no sabe que existe.
    +
    + +
    +
    Has intentado cientos de suplementos diferentes.
    +
    Nadie preguntó cuáles.
    +
    + +
    + Las conexiones están ahí.
    + Simplemente son demasiado complejas para que una sola persona las comprenda. +
    +
    Nadie sabe cómo tu cuerpo procesa la Warfarina — ni siquiera tú. - Pero la respuesta podría estar escondida en tu 23andMe. - Ese "sin hallazgos" en tu resonancia — ¿alguien miró cuidadosamente los 4.000 cortes? - Tu tiroides está "dentro del rango" — pero nadie lo conectó con tu fatiga, tu peso, que siempre tienes frío. + Pero la respuesta ya podría estar oculta en tu 23andMe. + Ese 'sin hallazgos significativos' en tu resonancia magnética — ¿alguien miró de cerca los 4,000 cortes? + Tu tiroides está 'dentro del rango' — pero nadie la conectó con tu fatiga, tu peso, siempre tener frío.
    +
    - Nadie conecta tu café de la tarde con tu calidad de sueño. - Tus niveles de hierro con tu fatiga en el entrenamiento. + Nadie está conectando tu cafeína de la tarde con tus puntuaciones de sueño. + Tus niveles de hierro con tu fatiga durante el ejercicio. Tu genética con tu niebla mental.
    +
    Tu IA no olvida. - No se apresura. - Encuentra lo que se pasó por alto. + No tiene prisa. + Encuentra lo que se perdió. No se especializa — te ve completo.
    -
    inou permite que tu IA tome todo en cuenta — cada corte, cada marcador, cada variante — conecta todo y finalmente te da respuestas que nadie más podía dar.
    + +
    inou permite que tu IA lo tenga todo en cuenta — cada corte, cada marcador, cada variante — conecta todo y finalmente te da respuestas que nadie más podría darte.
    + +

    Por qué construimos esto

    -

    Has recopilado años de datos de salud. Estudios del hospital. Análisis del laboratorio. Resultados del portal del médico. Datos de tu reloj. Quizás incluso tu ADN.

    -

    Y luego está todo lo que solo tú sabes — tu peso, tu presión arterial, tu programa de entrenamiento, los suplementos que tomas, los síntomas que siempre olvidas mencionar.

    -

    Todo está ahí — pero disperso en sistemas que no se comunican, con especialistas que solo ven su parte, o encerrado en tu propia cabeza.

    -

    Tu cardiólogo no sabe lo que encontró tu neurólogo. Tu entrenador no ha visto tus análisis de sangre. Tu médico no tiene idea de qué suplementos tomas. Y ninguno de ellos tiene tiempo para sentarse contigo y conectar los puntos.

    -

    La IA finalmente puede. Puede unir lo que ningún experto solo ve — y además explicártelo.

    -

    Pero estos datos no caben en una ventana de chat. Y lo último que quieres es tu historial médico en los servidores de alguien más, entrenando sus modelos.

    -

    inou lo une todo — laboratorio, imágenes, genética, signos vitales, medicamentos, suplementos — encriptado, privado, y sin compartir con absolutamente nadie. Tu IA se conecta de forma segura. Tus datos siguen siendo tuyos.

    -
    Tu salud, comprendida.
    + +

    Has recopilado años de datos de salud. Exploraciones del hospital. Análisis de sangre del laboratorio. Resultados del portal de tu médico. Datos de tu reloj. Quizás incluso tu ADN.

    + +

    Y luego está todo lo que solo tú conoces — tu peso, tu presión arterial, tu calendario de entrenamiento, los suplementos que tomas, los síntomas que has estado pensando mencionar.

    + +

    Todo está ahí — pero disperso en sistemas que no se hablan, en manos de especialistas que solo ven su parte, o bloqueado en tu propia cabeza.

    + +

    Tu cardiólogo no sabe lo que encontró tu neurólogo. Tu entrenador no ha visto tus análisis de sangre. Tu médico no tiene idea de qué suplementos estás tomando. Y ninguno de ellos tiene tiempo para sentarse contigo y conectar los puntos.

    + +

    La IA finalmente puede. Puede sintetizar lo que ningún experto individual ve — y realmente explicártelo.

    + +

    Pero estos datos no caben en una ventana de chat. Y lo último que quieres es tu historial médico en los servidores de otra persona, entrenando sus modelos.

    + +

    inou une todo — laboratorios, imágenes, genética, signos vitales, medicamentos, suplementos — encriptado, privado y compartido con absolutamente nadie. Tu IA se conecta de forma segura. Tus datos siguen siendo tuyos.

    + +
    Tu salud, entendida.
    +
    -
    {{.T.never_training}}{{.T.never_training_desc}}
    -
    {{.T.never_shared}}{{.T.never_shared_desc}}
    -
    {{.T.encrypted}}{{.T.encrypted_desc}}
    -
    {{.T.delete}}{{.T.delete_desc}}
    +
    + {{.T.never_training}} + {{.T.never_training_desc}} +
    +
    + {{.T.never_shared}} + {{.T.never_shared_desc}} +
    +
    + {{.T.encrypted}} + {{.T.encrypted_desc}} +
    +
    + {{.T.delete}} + {{.T.delete_desc}} +
    - + + {{template "footer"}} +
    -{{end}} + +{{end}} \ No newline at end of file diff --git a/portal/templates/pricing_da.tmpl b/portal/templates/pricing_da.tmpl new file mode 100644 index 0000000..8a786a1 --- /dev/null +++ b/portal/templates/pricing_da.tmpl @@ -0,0 +1,291 @@ +{{define "pricing_da"}} + + +
    +
    +

    Priser

    +

    Alle niveauer er gratis indtil 1. juli 2026. Intet kreditkort kræves.

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    Overvågning
    +
    Gratis
    +
    +
    Optimering
    +
    $12/md
    +
    gratis indtil 1/7/26
    +
    +
    Forskning
    +
    $35/md
    +
    gratis til 1/7/26
    +
    Sundhedsdata
    Vitalparametre (blodtryk, puls, vægt, temp)
    Symptomer og tilstande
    Medicin
    Motion og aktivitet
    Familiehistorik
    Laboratorieresultater
    Forbrugergenom (23andMe)
    Medicinsk billeddannelse (MR, CT, røntgen)
    Klinisk genomsekventering
    AI-funktioner
    MCP-integration (Claude, ChatGPT)
    Personaliserede AI-svarBegrænset
    Sundhedstendensanalyse
    Opbevaring og adgang
    Understøttelse af flere mapper (familie)
    FIPS 140-3 kryptering
    Dataeksport
    +
    + + {{template "footer"}} +
    +{{end}} \ No newline at end of file diff --git a/portal/templates/pricing_de.tmpl b/portal/templates/pricing_de.tmpl new file mode 100644 index 0000000..8c6a68f --- /dev/null +++ b/portal/templates/pricing_de.tmpl @@ -0,0 +1,291 @@ +{{define "pricing_de"}} + + +
    +
    +

    Preise

    +

    Alle Stufen sind bis zum 1. Juli 2026 kostenlos. Keine Kreditkarte erforderlich.

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    Monitor
    +
    Kostenlos
    +
    +
    Optimize
    +
    $12/Monat
    +
    kostenlos bis 1. Juli 2026
    +
    +
    Research
    +
    $35/Monat
    +
    kostenlos bis 1. Juli 2026
    +
    Gesundheitsdaten
    Vitalparameter (BP, HR, Gewicht, Temperatur)
    Symptome & Zustände
    Medikamente
    Bewegung & Aktivität
    Familienanamnese
    Laborergebnisse
    Konsumenten-Genom (23andMe)
    Medizinische Bildgebung (MRI, CT, Röntgen)
    Klinische Genomsequenzierung
    KI-Funktionen
    MCP-Integration (Claude, ChatGPT)
    Personalisierte KI-AntwortenBegrenzt
    Gesundheitstrend-Analyse
    Speicherung & Zugriff
    Mehrfach-Dossier-Unterstützung (Familie)
    FIPS 140-3 Verschlüsselung
    Datenexport
    +
    + + {{template "footer"}} +
    +{{end}} \ No newline at end of file diff --git a/portal/templates/pricing_es.tmpl b/portal/templates/pricing_es.tmpl new file mode 100644 index 0000000..39cb0d9 --- /dev/null +++ b/portal/templates/pricing_es.tmpl @@ -0,0 +1,291 @@ +{{define "pricing_es"}} + + +
    +
    +

    Precios

    +

    Todos los niveles son gratuitos hasta el 1 de julio de 2026. No se requiere tarjeta de crédito.

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    Monitor
    +
    Gratis
    +
    +
    Optimizar
    +
    $12/mes
    +
    gratis hasta 1/7/26
    +
    +
    Investigación
    +
    $35/mes
    +
    gratis hasta 1/7/26
    +
    Datos de salud
    Signos vitales (PA, FC, peso, temp)
    Síntomas y condiciones
    Medicamentos
    Ejercicio y actividad
    Historial familiar
    Resultados de laboratorio
    Genoma del consumidor (23andMe)
    Imágenes médicas (IRM, TC, rayos X)
    Secuenciación genómica clínica
    Funciones de IA
    Integración MCP (Claude, ChatGPT)
    Respuestas de IA personalizadasLimitado
    Análisis de tendencias de salud
    Almacenamiento y acceso
    Soporte multi-expediente (familia)
    Cifrado FIPS 140-3
    Exportación de datos
    +
    + + {{template "footer"}} +
    +{{end}} \ No newline at end of file diff --git a/portal/templates/pricing_ja.tmpl b/portal/templates/pricing_ja.tmpl new file mode 100644 index 0000000..ef1e808 --- /dev/null +++ b/portal/templates/pricing_ja.tmpl @@ -0,0 +1,291 @@ +{{define "pricing_ja"}} + + +
    +
    +

    料金プラン

    +

    2026年7月1日まで全プラン無料です。クレジットカードは不要です。

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    モニター
    +
    無料
    +
    +
    最適化
    +
    $12/月
    +
    26/7/1まで無料
    +
    +
    リサーチ
    +
    $35/月
    +
    26/7/1まで無料
    +
    健康データ
    バイタルサイン(血圧、心拍、体重、体温)
    症状と病状
    運動とアクティビティ
    家族歴
    検査結果
    コンシューマーゲノム(23andMe)
    医用画像(MRI、CT、X線)
    臨床ゲノムシーケンス
    AI機能
    MCP連携(Claude、ChatGPT)
    パーソナライズされたAI回答制限あり
    健康トレンド分析
    ストレージとアクセス
    マルチドシエサポート(家族)
    FIPS 140-3 暗号化
    データエクスポート
    +
    + + {{template "footer"}} +
    +{{end}} \ No newline at end of file diff --git a/portal/templates/terms_de.tmpl b/portal/templates/terms_de.tmpl new file mode 100644 index 0000000..38f7c2d --- /dev/null +++ b/portal/templates/terms_de.tmpl @@ -0,0 +1,196 @@ +{{define "terms_de"}} + + +
    + +
    +

    Nutzungsbedingungen

    +

    Diese Bedingungen regeln deine Nutzung von inou. Durch das Erstellen eines Kontos stimmst du ihnen zu. Wenn du nicht zustimmst, nutze den Service nicht.

    +
    + +
    +

    Der Service

    + +

    Was inou ist.

    +

    inou ist eine persönliche Gesundheitsdatenplattform. Du lädst deine medizinischen Dateien hoch – Bildgebung, Laborergebnisse, genetische Daten – und wir speichern sie sicher, damit du sie ansehen und verwalten kannst. Du kannst Drittanbieter-Tools, wie z. B. KI‑Assistenten, verbinden, um auf deine Daten zuzugreifen.

    + +

    Was inou nicht ist.

    +

    inou ist kein medizinisches Gerät. Es ist nicht für klinische Diagnosen, Behandlungen, Heilungen oder Prävention von Krankheiten oder medizinischen Zuständen bestimmt. inou gibt keine medizinischen Ratschläge. Die Plattform zeigt deine Daten – sie interpretiert sie nicht, empfiehlt keine Maßnahmen oder ersetzt einen qualifizierten Gesundheitsfachmann. Konsultiere immer deinen Arzt für medizinische Entscheidungen.

    +
    + +
    +

    Dein Konto

    + +

    Kontobestimmungen.

    +

    Du musst mindestens 18 Jahre alt sein, um ein Konto zu erstellen, es sei denn, ein Elternteil oder Erziehungsberechtigter erstellt und verwaltet das Konto in deinem Namen. Du bist dafür verantwortlich, deine Zugangsdaten sicher aufzubewahren. Ein Konto pro Person – Konten sind nicht übertragbar.

    + +

    Deine Daten, deine Verantwortung.

    +

    Du bist für die Genauigkeit und Rechtsmäßigkeit der hochgeladenen Daten verantwortlich. Du musst das Recht haben, die hochgeladenen Dateien zu speichern und zu verarbeiten. Lade keine Daten anderer hoch, ohne deren ausdrückliche Zustimmung.

    +
    + +
    +

    Unsere Verantwortlichkeiten

    + +

    Was wir bereitstellen.

    +

    Wir speichern deine Daten sicher unter Verwendung von FIPS 140‑3 validierter Verschlüsselung, stellen sie dir über die Plattform zur Verfügung und übertragen sie an Drittanbieter-Dienste, die du ausdrücklich autorisierst. Weitere Informationen zum Schutz deiner Daten findest du auf unserer Sicherheitsseite. Wir informieren dich über wesentliche Änderungen dieser Bedingungen oder unserer Datenschutzpraktiken.

    + +

    Was wir nicht garantieren.

    +

    Wir streben nach kontinuierlicher Verfügbarkeit, können sie jedoch nicht garantieren. Der Service kann vorübergehend wegen Wartung, Updates oder unvorhersehbarer Umstände nicht verfügbar sein. Wir haften nicht für Entscheidungen, die du oder andere auf Basis der über die Plattform angesehenen Daten treffen.

    +
    + +
    +

    Datenschutz und Datenverarbeitung

    +

    Deine Nutzung von inou unterliegt unserer Datenschutzerklärung und dem Auftragsverarbeitungsvertrag, die beschreiben, welche Daten wir erfassen, wie wir sie nutzen und welche Rechte du hast. Durch die Nutzung des Service erkennst du diese Bedingungen an und stimmst ihnen zu.

    +
    + +
    +

    Akzeptabler Gebrauch

    + +

    Nicht.

    +

    Versuche nicht, auf Daten anderer Nutzer zuzugreifen. Reversiere, prüfe oder attackiere die Plattform nicht. Verwende den Service nicht für illegale Zwecke. Lade keine bösartigen Dateien hoch. Lade keine Inhalte hoch, die nicht mit Gesundheitsdaten zusammenhängen – dies ist eine medizinische Plattform, kein allgemeines Speichersystem. Teile deine Zugangsdaten nicht. Verkaufe keinen Zugang zum Service weiter.

    + +

    Wenn du das tust.

    +

    Wir können dein Konto suspendieren oder kündigen. Bei illegalen Aktivitäten werden wir mit den Strafverfolgungsbehörden zusammenarbeiten.

    +
    + +
    +

    Geistiges Eigentum

    +

    Deine Daten gehören dir. Du behältst alle Rechte an den Gesundheitsdaten, Dateien und Informationen, die du hochlädst. Wir beanspruchen kein Eigentum an deinem Inhalt.

    +

    Die inou-Plattform – ihre Software, ihr Design, ihre Marken und Dokumentation – gehört uns. Diese Bedingungen gewähren dir eine persönliche, nicht‑exklusive, nicht übertragbare Lizenz zur Nutzung des Service. Sie gewähren dir keine Rechte an unserem Code, Design oder unserer Marke.

    +
    + +
    +

    Bezahlung

    + +

    Preise.

    +

    Pläne und Preise werden auf unserer Preisseite beschrieben. Die Preise können sich ändern – wir informieren dich im Voraus über jede Erhöhung. Die Zahlung wird von Drittanbietern abgewickelt. Wir sehen oder speichern deine Zahlungsdetails nie.

    + +

    Rückerstattungen.

    +

    Wenn du unzufrieden bist, kontaktiere uns. Wir bearbeiten Rückerstattungen individuell.

    +
    + +
    +

    Kündigung

    + +

    Du kannst jederzeit kündigen.

    +

    Lösche dein Konto, und alle deine Daten werden dauerhaft gelöscht. Keine Benachrichtigung erforderlich. Keine Strafe.

    + +

    Wir können ebenfalls kündigen.

    +

    Wir können dein Konto wegen Verstoßes gegen diese Bedingungen kündigen, sofern möglich, mit Vorankündigung. Wenn wir den Service vollständig einstellen, geben wir dir angemessene Zeit, deine Daten zu exportieren.

    +
    + +
    +

    Haftung

    + +

    Haftungsbeschränkung.

    +

    In dem maximalen Umfang, der gesetzlich zulässig ist, ist die Gesamthaftung von inou dir gegenüber für jegliche Ansprüche, die sich aus diesen Bedingungen oder dem Service ergeben, auf den Betrag begrenzt, den du in den 12 Monaten vor dem Anspruch an uns gezahlt hast. Wir haften nicht für indirekte, beiläufige, besondere, Folgeschäden oder Strafschäden.

    + +

    Entschädigung.

    +

    Du verpflichtest dich, inou gegen Ansprüche zu entschädigen, die sich aus deiner Nutzung des Service, deinen Daten oder deinem Verstoß gegen diese Bedingungen ergeben.

    +
    + +
    +

    Anwendbares Recht

    +

    Diese Bedingungen unterliegen den Gesetzen des Bundesstaates Florida, USA. Streitigkeiten werden vor den Gerichten Floridas entschieden.

    +
    + +
    +

    Änderungen

    +

    Wir können diese Bedingungen aktualisieren. Registrierte Nutzer werden per E‑Mail über wesentliche Änderungen informiert. Die fortgesetzte Nutzung nach Änderungen gilt als Zustimmung.

    +

    Datenschutzbeauftragter: privacy@inou.com

    +

    Zuletzt aktualisiert: 8. Februar 2026.

    +
    + + {{template "footer"}} + +
    +{{end}} \ No newline at end of file diff --git a/tools/translate/main.go b/tools/translate/main.go new file mode 100644 index 0000000..a359a48 --- /dev/null +++ b/tools/translate/main.go @@ -0,0 +1,515 @@ +// translate: MiniMax M2.5 draft → GLM 5 review → write +// +// translate --lang de --what faq +// translate --lang all --what all +// translate --lang de --what yaml --no-review + +package main + +import ( + "bufio" + "bytes" + "encoding/json" + "flag" + "fmt" + "io" + "net/http" + "os" + "path/filepath" + "sort" + "strings" + "time" +) + +const apiURL = "https://openrouter.ai/api/v1/chat/completions" + +var ( + translateModel = "openai/gpt-oss-20b:nitro" + reviewModel = "z-ai/glm-5" + apiKey string +) + +var langName = map[string]string{ + "da": "Danish", "de": "German", "es": "Spanish", "fi": "Finnish", + "fr": "French", "hi": "Hindi", "id": "Indonesian", "it": "Italian", + "ja": "Japanese", "ko": "Korean", "nl": "Dutch", "no": "Norwegian", + "pl": "Polish", "pt": "Portuguese", "ru": "Russian", "sv": "Swedish", + "th": "Thai", "tr": "Turkish", "uk": "Ukrainian", "vi": "Vietnamese", + "zh": "Chinese (Simplified)", +} + +var langNative = map[string]string{ + "da": "Dansk", "de": "Deutsch", "es": "Español", "fi": "Suomi", + "fr": "Français", "hi": "हिन्दी", "id": "Bahasa Indonesia", "it": "Italiano", + "ja": "日本語", "ko": "한국어", "nl": "Nederlands", "no": "Norsk", + "pl": "Polski", "pt": "Português", "ru": "Русский", "sv": "Svenska", + "th": "ไทย", "tr": "Türkçe", "uk": "Українська", "vi": "Tiếng Việt", + "zh": "中文", +} + +var langAddress = map[string]string{ + "da": "du/din", "de": "du/dein (informal)", "es": "tú (informal)", + "fr": "tu/ton (informal)", "hi": "तुम (informal)", "id": "kamu (informal)", + "it": "tu (informal)", "ja": "polite form (です/ます)", "ko": "존댓말 (polite)", + "nl": "je/jouw (informal)", "no": "du/din", "pl": "ty (informal)", + "pt": "você", "ru": "ты (informal)", "sv": "du/din", "th": "คุณ (polite)", + "tr": "sen (informal)", "uk": "ти (informal)", "vi": "bạn (informal)", + "zh": "你 (informal)", +} + +var knownTemplates = []string{"landing", "faq", "pricing", "privacy", "security", "dpa", "terms", "connect", "docs", "consent"} + +func main() { + lang := flag.String("lang", "", "language(s) or 'all'") + what := flag.String("what", "", "template name(s), 'yaml', or 'all'") + key := flag.String("key", "", "OpenRouter API key") + portal := flag.String("portal", "", "portal directory") + noReview := flag.Bool("no-review", false, "skip review pass") + flag.Parse() + + apiKey = pick(*key, os.Getenv("OPENROUTER_API_KEY"), envKey("OPENROUTER_API_KEY")) + if apiKey == "" { + die("no API key") + } + portalDir := *portal + if portalDir == "" { + portalDir = findPortalDir() + } + if *lang == "" || *what == "" { + die("Usage: translate --lang --what ") + } + + langs := resolveLangs(*lang) + tmpls, doYAML := resolveWhat(*what) + review := !*noReview + total := len(langs) * (len(tmpls) + b2i(doYAML)) + n, errors := 0, 0 + + for _, l := range langs { + for _, t := range tmpls { + n++ + fmt.Printf("[%d/%d] %s/%s ", n, total, l, t) + if err := doTemplate(portalDir, l, t, review); err != nil { + fmt.Printf("ERROR: %v\n", err) + errors++ + } + } + if doYAML { + n++ + fmt.Printf("[%d/%d] %s/yaml ", n, total, l) + if err := doYAML_(portalDir, l, review); err != nil { + fmt.Printf("ERROR: %v\n", err) + errors++ + } + } + } + fmt.Printf("\nDone: %d/%d succeeded\n", total-errors, total) + if errors > 0 { + os.Exit(1) + } +} + +// --- Template --- + +func doTemplate(portalDir, lang, name string, review bool) error { + src, err := os.ReadFile(filepath.Join(portalDir, "templates", name+".tmpl")) + if err != nil { + return err + } + ln, addr := langName[lang], langAddress[lang] + + prompt := fmt.Sprintf(`Translate this web page template from English to %s. +RULES: +- Preserve ALL HTML tags, attributes, classes, IDs exactly +- Preserve ALL Go template syntax ({{.T.key}}, {{range}}, {{end}}, {{if}}, etc.) +- Preserve ALL JavaScript and CSS untranslated +- Never translate "inou" +- Keep English loanwords %s speakers actually use +- Use %s address forms +- Keep technical terms: DICOM, MRI, CT, FLAIR, MCP, API, JSON, CSV, HIPAA, GDPR, OCR, PDF +- Rename {{define "X"}} to {{define "X_%s"}} +- Output ONLY the translated template`, ln, ln, addr, lang) + + fmt.Printf("draft... ") + translated, err := callLLM(translateModel, prompt, string(src), 0) + if err != nil { + return err + } + translated = stripFences(translated) + translated = ensureDefine(translated, name, lang) + + if review { + fmt.Printf("GLM review... ") + translated = reviewContent(translated, ln, "template") + } + + os.WriteFile(filepath.Join(portalDir, "templates", name+"_"+lang+".tmpl"), []byte(translated), 0644) + fmt.Println("ok") + return nil +} + +// --- YAML --- + +func doYAML_(portalDir, lang string, review bool) error { + src, err := os.ReadFile(filepath.Join(portalDir, "lang", "en.yaml")) + if err != nil { + return err + } + ln, addr := langName[lang], langAddress[lang] + + allKeys := extractKeys(string(src)) + keys := make(map[string]string) + passthrough := make(map[string]string) + for k, v := range allKeys { + switch { + case strings.HasPrefix(k, "lang_"): + passthrough[k] = v + case k == "language_name": + passthrough[k] = langNative[lang] + default: + keys[k] = v + } + } + keysJSON, _ := json.Marshal(keys) + + prompt := fmt.Sprintf(`Translate these UI strings from English to %s. +Return a JSON object with same keys and translated values. +RULES: keep format placeholders (%%s %%d), never translate "inou", use %s address, keep technical terms. +Return ONLY valid JSON.`, ln, addr) + + fmt.Printf("draft... ") + result, err := callLLM(translateModel, prompt, string(keysJSON), 0) + if err != nil { + return err + } + result = stripFences(result) + + var translated map[string]string + if err := json.Unmarshal([]byte(result), &translated); err != nil { + return fmt.Errorf("bad JSON: %w", err) + } + + if review { + fmt.Printf("GLM review... ") + reviewYAML_(keys, translated, ln) + } + + for k, v := range passthrough { + translated[k] = v + } + os.WriteFile(filepath.Join(portalDir, "lang", lang+".yaml"), []byte(rebuildYAML(string(src), translated)), 0644) + fmt.Println("ok") + return nil +} + +// --- LLM call --- + +func callLLM(model, system, user string, maxTokHint int) (string, error) { + body := map[string]any{ + "model": model, + "messages": []map[string]string{{"role": "system", "content": system}, {"role": "user", "content": user}}, + "temperature": 0.1, + "provider": map[string]any{"order": []string{"Groq"}, "allow_fallbacks": true}, + } + if maxTokHint > 0 { + body["max_tokens"] = maxTokHint + } + + data, _ := json.Marshal(body) + req, _ := http.NewRequest("POST", apiURL, bytes.NewReader(data)) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+apiKey) + + // MiniMax M2.5 reasons before generating — needs generous timeout + // pricing (8KB) = 40s, landing (16KB) ~80s, faq (51KB) ~200s + timeout := time.Duration(len(user)/80+60) * time.Second + if timeout < 3*time.Minute { + timeout = 3 * time.Minute + } + t0 := time.Now() + resp, err := (&http.Client{Timeout: timeout}).Do(req) + if err != nil { + return "", fmt.Errorf("[%.0fs] %v", time.Since(t0).Seconds(), err) + } + defer resp.Body.Close() + respData, _ := io.ReadAll(resp.Body) + fmt.Printf("[%.0fs %dKB] ", time.Since(t0).Seconds(), len(respData)/1024) + + if resp.StatusCode != 200 { + return "", fmt.Errorf("HTTP %d: %.300s", resp.StatusCode, respData) + } + + var r struct { + Choices []struct { + Message struct { + Content string `json:"content"` + Reasoning string `json:"reasoning"` + } `json:"message"` + FinishReason string `json:"finish_reason"` + } `json:"choices"` + Error *struct { + Message string `json:"message"` + } `json:"error"` + } + if err := json.Unmarshal(respData, &r); err != nil { + return "", fmt.Errorf("bad JSON: %.300s", respData) + } + if r.Error != nil { + return "", fmt.Errorf("API: %s", r.Error.Message) + } + if len(r.Choices) == 0 { + return "", fmt.Errorf("no choices: %.300s", respData) + } + + content := r.Choices[0].Message.Content + if content == "" { + content = r.Choices[0].Message.Reasoning + } + if content == "" { + return "", fmt.Errorf("empty content: %.500s", respData) + } + if r.Choices[0].FinishReason == "length" { + return "", fmt.Errorf("truncated (output hit max_tokens)") + } + return content, nil +} + +// --- Review --- + +type fix struct { + Old string `json:"old"` + New string `json:"new"` + Reason string `json:"reason"` +} + +func reviewContent(content, ln, kind string) string { + prompt := fmt.Sprintf(`Review this %s translation to %s. Check: wrong words, grammar, broken HTML tags, broken Go template tags, stray whitespace. +Return JSON array: [{"old":"exact string","new":"fix","reason":"why"}]. If perfect return [].`, ln, kind) + result, err := callLLM(reviewModel, prompt, content, 16384) + if err != nil { + fmt.Printf("(review error: %v) ", err) + return content + } + fixes := parseFixes(result) + applied := 0 + for _, f := range fixes { + if f.Old != "" && f.New != "" && strings.Contains(content, f.Old) { + content = strings.Replace(content, f.Old, f.New, 1) + applied++ + } + } + if applied > 0 { + fmt.Printf("(%d fixes) ", applied) + } + return content +} + +func reviewYAML_(english, translated map[string]string, ln string) { + type pair struct { + EN string `json:"en"` + TR string `json:"tr"` + } + combined := make(map[string]pair) + for k, v := range english { + combined[k] = pair{EN: v, TR: translated[k]} + } + data, _ := json.Marshal(combined) + + prompt := fmt.Sprintf(`Review these %s UI string translations. "en" is original, "tr" is translation. +Check: wrong translations, grammar, broken format placeholders. +Return JSON: [{"old":"yaml_key","new":"corrected value","reason":"why"}]. If perfect return [].`, ln) + + result, err := callLLM(reviewModel, prompt, string(data), 16384) + if err != nil { + fmt.Printf("(review error: %v) ", err) + return + } + fixes := parseFixes(result) + for _, f := range fixes { + if _, ok := translated[f.Old]; ok { + translated[f.Old] = f.New + } + } + if len(fixes) > 0 { + fmt.Printf("(%d fixes) ", len(fixes)) + } +} + +func parseFixes(raw string) []fix { + raw = stripFences(strings.TrimSpace(raw)) + var fixes []fix + if json.Unmarshal([]byte(raw), &fixes) != nil { + if s := strings.Index(raw, "["); s >= 0 { + if e := strings.LastIndex(raw, "]"); e > s { + json.Unmarshal([]byte(raw[s:e+1]), &fixes) + } + } + } + return fixes +} + +// --- Helpers --- + +func ensureDefine(content, name, lang string) string { + want := fmt.Sprintf(`{{define "%s_%s"}}`, name, lang) + if strings.Contains(content, want) { + return content + } + if i := strings.Index(content, `{{define "`); i >= 0 { + if j := strings.Index(content[i:], `"}}`); j > 0 { + return content[:i] + want + content[i+j+3:] + } + } + return want + "\n" + content +} + +func extractKeys(src string) map[string]string { + keys := make(map[string]string) + scanner := bufio.NewScanner(strings.NewReader(src)) + for scanner.Scan() { + line := scanner.Text() + if t := strings.TrimSpace(line); strings.HasPrefix(t, "#") || t == "" { + continue + } + if idx := strings.Index(line, ":"); idx > 0 { + k := strings.TrimSpace(line[:idx]) + v := strings.TrimSpace(line[idx+1:]) + if len(v) >= 2 && v[0] == '"' && v[len(v)-1] == '"' { + v = v[1 : len(v)-1] + } + if k != "" && v != "" { + keys[k] = v + } + } + } + return keys +} + +func rebuildYAML(src string, translated map[string]string) string { + var out strings.Builder + scanner := bufio.NewScanner(strings.NewReader(src)) + for scanner.Scan() { + line := scanner.Text() + t := strings.TrimSpace(line) + if strings.HasPrefix(t, "#") || t == "" { + out.WriteString(line + "\n") + continue + } + idx := strings.Index(line, ":") + if idx < 0 { + out.WriteString(line + "\n") + continue + } + key := strings.TrimSpace(line[:idx]) + if val, ok := translated[key]; ok { + if needsQuote(val) { + val = strings.ReplaceAll(val, `\`, `\\`) + val = strings.ReplaceAll(val, `"`, `\"`) + out.WriteString(key + ": \"" + val + "\"\n") + } else { + out.WriteString(key + ": " + val + "\n") + } + } else { + out.WriteString(line + "\n") + } + } + return out.String() +} + +func needsQuote(s string) bool { + return s == "" || strings.ContainsAny(s, `:{}[]&*?|>!%@`+"`\"'#") || + s[0] == ' ' || s[len(s)-1] == ' ' || s[0] == '-' || s[0] == '{' || + s == "true" || s == "false" || s == "null" || s == "yes" || s == "no" +} + +func stripFences(s string) string { + s = strings.TrimSpace(s) + for _, p := range []string{"```json", "```yaml", "```html", "```"} { + if strings.HasPrefix(s, p) { + s = s[len(p):] + break + } + } + if strings.HasSuffix(s, "```") { + s = s[:len(s)-3] + } + return strings.TrimSpace(s) +} + +func envKey(name string) string { + for _, p := range []string{"anthropic.env", "/tank/inou/anthropic.env"} { + if data, err := os.ReadFile(p); err == nil { + for _, line := range strings.Split(string(data), "\n") { + if strings.HasPrefix(strings.TrimSpace(line), name+"=") { + return strings.TrimSpace(strings.TrimPrefix(strings.TrimSpace(line), name+"=")) + } + } + } + } + return "" +} + +func findPortalDir() string { + dir, _ := os.Getwd() + for { + if _, err := os.Stat(filepath.Join(dir, "portal", "templates")); err == nil { + return filepath.Join(dir, "portal") + } + p := filepath.Dir(dir) + if p == dir { + break + } + dir = p + } + die("cannot find portal/") + return "" +} + +func resolveLangs(spec string) []string { + if spec == "all" { + var out []string + for l := range langName { + out = append(out, l) + } + sort.Strings(out) + return out + } + return strings.Split(spec, ",") +} + +func resolveWhat(spec string) ([]string, bool) { + if spec == "all" { + return knownTemplates, true + } + var t []string + yaml := false + for _, p := range strings.Split(spec, ",") { + if p == "yaml" { + yaml = true + } else { + t = append(t, p) + } + } + return t, yaml +} + +func pick(ss ...string) string { + for _, s := range ss { + if s != "" { + return s + } + } + return "" +} + +func b2i(b bool) int { + if b { + return 1 + } + return 0 +} + +func die(msg string) { + fmt.Fprintln(os.Stderr, msg) + os.Exit(1) +}