尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Plataforma professional de coneixement col·laboratiu per al bloc quirúrgic (Flutter: Android, iOS, Web). Reuneix instrumental, tècniques, protocols i l'experiència real de l'equip en un sol lloc, i permet a qualsevol grup (un hospital, un bloc quirúrgic, un servei, un equip d'instrumentistes, un centre de formació...) documentar la seva pròpia manera de treballar — substituint les carpetes de paper desactualitzades per alguna cosa que es porta a la tauleta o al mòbil.查看完整 README ↗
🌐 Català · Castellano · English
Plataforma professional de coneixement col·laboratiu per al bloc quirúrgic (Flutter: Android, iOS, Web). Reuneix instrumental, tècniques, protocols i l'experiència real de l'equip en un sol lloc, i permet a qualsevol grup (un hospital, un bloc quirúrgic, un servei, un equip d'instrumentistes, un centre de formació...) documentar la seva pròpia manera de treballar — substituint les carpetes de paper desactualitzades per alguna cosa que es porta a la tauleta o al mòbil.
L'ús bàsic (catàleg, flashcards, quiz, progrés) no requereix compte. Només cal iniciar sessió si vols unir-te o crear l'espai compartit del teu grup.
Obre l'app · Web i Vademècum públic · Novetats · Suggeriments
| Entrada al grup | Catàleg | Detall | Flashcards |
|---|---|---|---|
org_type), cadascun organitzat en diversos espais de treball (per especialitat, servei, formació...); tècniques, protocols i targetes de preferència pengen d'un espai, no només de l'organització sencera.teams/team_members) — el rol efectiu és el màxim entre el directe i l'heretat de l'equip.[email protected].lib/
l10n/ # ARB (català/castellà/anglès) + AppLocalizations generat (flutter gen-l10n)
models/ # Instrument, PreferenceCard(Version), GroupDocument(Version, ProtocolStep), Workspace(Role/Member),
# Organization (= grup, amb org_type), AuditEntry, HospitalContentStats, CustomInstrument(Variant),
# WorkMode, SterilizationMethodEntry/InstrumentTechnicalInfo, Tray(Version, Item),
# Manufacturer, Surgeon, SpecialtyEntity, Tag, ReferenceDocument, Team, UsageStats
data/ # Catàleg d'instrumental (118) i especialitats quirúrgiques estàndard
design_system/ # Tokens (color, tipografia, espaiat) i components compartits del sistema visual
navigation/ # Shell responsive (StatefulShellRoute): barra lateral en escriptori, navegació inferior en mòbil
services/ # Supabase, auth, perfil/organització, espais, progrés, tema, idioma, compte (RGPD),
# versió de l'app, auditoria, analítica d'ús, instrumental personalitzat,
# connectivitat, caché/cua de sincronització sense connexió, notificacions push,
# esterilització, safates, equips (teams), targetes de preferència (versionat)
screens/
auth/ # Entrada única (unir-se/crear grup amb compte en el mateix formulari), login, flux de connexió
admin/ # Gestió de l'organització (codi, membres, equips, propietat)
... # Inici (cerca global), Catàleg, Aprèn, progrés, espais, tècniques/protocols,
# targetes de preferència (versionat), compte i privacitat, auditoria, cobertura de
# coneixement i analítica d'ús, instrumental personalitzat de l'equip, safates,
# Biblioteca Pública (contingut i traduccions), les meves aportacions
utils/ # Generador de codi d'invitació
supabase/
schema_v*.sql # Esquema SQL (executa en ordre: schema.sql → schema_v29_public_library.sql → ...)
functions/ # Edge Functions (send-push: envia notificacions via FCM a partir del log d'auditoria)
flutter pub get
flutter run # dispositiu/emulador Android o iOS connectat
flutter run -d chrome # navegador
supabase/schema_v*.sql (i schema.sql primer):
schema.sql → schema_v2_hospital_admin.sql → schema_v3_fix_rls_recursion.sql → schema_v4_group_documents.sql → schema_v5_group_document_versions.sql → schema_v6_workspaces.sql → schema_v7_roles.sql → schema_v8_app_config.sql → schema_v9_gdpr.sql → schema_v10_audit.sql → schema_v11_analytics.sql → schema_v12_push_notifications.sql → schema_v13_custom_instruments.sql → schema_v14_security_hardening.sql → schema_v15_clinical_knowledge_model.sql → schema_v16_community_photos.sql → schema_v17_fix_anon_sterilization_read.sql → schema_v18_work_mode_favorites_recent.sql → schema_v19_core_domain_model.sql → schema_v20_organizations_rename.sql → schema_v21_teams_and_login_audit.sql → schema_v22_preference_card_versioning.sql → schema_v23_usage_analytics.sql → schema_v24_knowledge_links.sql → schema_v25_tray_preparation.sql → schema_v26_learning_progress.sql → schema_v27_contributors.sql → schema_v28_preference_card_constraints_fix.sql → schema_v29_public_library.sql → schema_v30_hospital_admin_promotion.sql → schema_v31_profile_security_hardening.sql → schema_v32_cssd_workspace.sql → schema_v33_public_knowledge_links_and_profile.sql → schema_v34_rpc_grants_hardening.sql → schema_v35_rpc_grants_hardening_fix.sql → schema_v36_public_growth_counter.sql → schema_v37_fix_stale_updated_at_triggers.sql → schema_v38_epic2_expansion.sql → schema_v39_custom_instrument_versioning.sql → schema_v40_duplicate_content.sql → schema_v41_invitations.sql → schema_v42_tray_adoption.sql → schema_v43_security_hardening.sql → schema_v44_storage_path_validation.sql → schema_v45_catalog_content_reports.sql → schema_v46_feature_suggestions.sql → → → → .app.instriq.org): Vercel. El repositori inclou vercel.json + vercel_build.sh — com que Vercel no porta Flutter preinstal·lat, l'script clona l'SDK stable a cada build, genera les localitzacions (flutter gen-l10n) i compila amb flutter build web --release. N'hi ha prou amb importar el repositori a Vercel (framework preset "Other") i connectar el subdomini des de Cloudflare amb un CNAME a cname.vercel-dns.com. lib/firebase_options.dart no es fa commit (veure .gitignore — claus de client Firebase, segures d'exposar només si estan restringides a Google Cloud Console, però cada entorn genera les seves en comptes de compartir un fitxer comú); vercel_build.sh el regenera en build time a partir d'aquestes variables d'entorn de Vercel (Project Settings → Environment Variables), amb els valors de l'app Web a Firebase Console → Project Settings → General:
FIREBASE_WEB_API_KEY, FIREBASE_WEB_APP_ID, FIREBASE_MESSAGING_SENDER_ID, FIREBASE_PROJECT_ID, FIREBASE_AUTH_DOMAIN, FIREBASE_STORAGE_BUCKET, FIREBASE_MEASUREMENT_ID.instriq.org i www.instriq.org): carpeta landing/, HTML estàtic sense build, servit per un Cloudflare Worker (Route instriq.org/* i www.instriq.org/*, tots dos registres DNS proxied). Català per defecte, amb selector ES/EN persistit a localStorage i a la URL (?lang=es/?lang=en) — cada variant té el seu propi hreflang/canonical, perquè els cercadors puguin indexar les tres versions, no només la catalana. Capçaleres de seguretat (landing/_headers: CSP, X-Frame-Options, HSTS...). Inclou la política de privacitat (landing/privacidad.html).targetSdk/compileSdk 36 (Android 16), requisit de Google Play des de 2026-08-31 — Flutter 3.44.8, AGP 9.0.1, Kotlin 2.3.20, Gradle 9.1.0, JDK 17. AAB signat generat (android/app/instriq-release.jks, android/key.properties no versionat); falta només la pujada manual a Play Console.v1.1.0 (2026-10-27). El projecte continua en desenvolupament actiu. Tot el que hi ha a la secció "Funcionalitats" de dalt ja està desplegat i funcionant en producció.
Instriq és gratuït i sense inversors, mantingut fora d'hores. Si et resulta útil, pots convidar-me a un cafè a Buy Me a Coffee — qualsevol aportació ajuda a cobrir el cost del servidor i el temps dedicat.
schema_v47_authz_null_bypass_fix.sqlschema_v48_public_instruments.sqlschema_v49_workspace_wizard.sqlschema_v50_public_translations.sqllib/services/supabase_config.dart. És pública/segura de fer commit — la seguretat real la dona Row Level Security, no el secret d'aquesta key.supabase/functions/send-push (supabase functions deploy send-push), afegeix el secret FCM_SERVICE_ACCOUNT_JSON (JSON del service account de Firebase) a Edge Functions → Secrets, i confirma que existeixi un Database Webhook o trigger que cridi aquesta funció en cada insert sobre audit_log (schema_v12 ja deixa el trigger llest si el teu projecte té pg_net).supabase/functions/send-invitation-email (supabase functions deploy send-invitation-email), afegeix el secret RESEND_API_KEY (diferent del SMTP que ja fa servir Supabase Auth per als seus propis correus), i configura al dashboard (Database → Webhooks) un webhook sobre insert a invitations que apunti a aquesta funció.schema_v43_security_hardening.sql): genera un valor aleatori, desa'l com a secret WEBHOOK_SHARED_SECRET a Edge Functions → Secrets (per a totes dues funcions), desa'l també a Supabase Vault amb el nom webhook_shared_secret (select vault.create_secret('<valor>', 'webhook_shared_secret', '...'), trigger_send_push() ja el llegeix d'allà), i afegeix la capçalera X-Webhook-Secret: <mateix valor> al webhook d'invitations que vas configurar al pas anterior.custom-instrument-photos existeix a Storage (la migració schema_v13 el crea; en alguns projectes cal crear-lo a mà des del dashboard amb el mateix nom).flutterfire configure (requereix un projecte Firebase) per generar lib/firebase_options.dart i el google-services.json/GoogleService-Info.plist de cada plataforma — cap dels tres es fa commit (veure .gitignore): són claus de client Firebase, no secretes en si mateixes, però cadascú les genera contra el seu propi projecte en comptes de compartir-ne un de comú. La protecció real d'aquestes claus és restringir-les a Google Cloud Console (paquet Android + SHA-1, bundle iOS, referrer HTTP a Web), no mantenir-les fora del repositori.