Vet app
vetvisits.fredmorin.dev/vetThe phone app a vet actually carries into the field: today's visits, a capture form for notes/photos/voice/video, and a shared invoice + prescription lookup. Built to keep working with no signal and catch up once it has one.
Signing in
This demo link skips the staff gate entirely â vet, dispatch, and admin are all directly reachable, no passphrase needed. (A real deployment would sit all three behind one shared gate passphrase instead, with no individual staff logins at that layer â the mechanism's still there, just switched off for this public demo.)
The vet section adds one more step on top: a dropdown of active vets, no password. Pick a name and you're in for 30 days; Sign out in the header signs out and drops you back on that dropdown.
Today's Visits
The home screen defaults to Today, with This week and All alongside it â same underlying list, just filtered differently, so planning ahead doesn't require opening Dispatch's calendar. Each row shows the client, animal (or "Herd visit" for a farm-level stop), time, and a status:
Working a visit
Opening a dispatched visit lands on the capture form, with a link back to Today's Visits at the top in case it was opened by mistake or something else needs checking first. Everything on it autosaves a couple of seconds after you stop typing â a status line above the form reads Saving⊠/ Saved / Offline so you always know where you stand.
Two note fields, on purpose
Staff only. Never leaves the building â not on an invoice, not in an email.
The one note field that reaches the client â it's what actually gets dropped into their visit-summary email once the visit is finalized. Use it for the friendly wrap-up, not the internal flag.
Photos
Tap Add to take or pick a photo. It drops straight into a simple annotator â draw on it if useful, or just tap Save to accept it as-is. Photos upload in the background the moment they're captured; if one fails, a small red retry badge appears on its thumbnail.
Voice notes
Tap Record a voice note to start recording, tap again to stop. Playable immediately, uploads in the background. A failed upload shows an inline "Didn't upload yet" message with its own retry link.
Video
Tap Record a video â it opens a full-screen recorder using the rear camera by default (a vet is filming an animal, not a selfie). Use the flip button beforehand to switch to the front camera if that's what's actually needed. Recording auto-stops at 60 seconds and uploads in the background, same retry pattern as photos and voice notes.
Prescriptions & other animals treated
The prescriptions panel writes a prescription against the visit's primary animal. For a herd visit â or any visit where more than one animal got treated â use + Add an animal to log each additional animal's own diagnosis, notes, and prescriptions separately; all of it rolls into the same invoice.
Template questions & extra items
Whatever questions the visit's template defines (vaccine given, symptoms observed, head countâŠ) show up as a normal form â required ones are marked. Below that, Add anything else is a free quantity picker over the full price catalog, for anything not already covered by a template answer.
Finishing up
Three buttons, pinned to the bottom of the screen so they're always in reach:
- Save Visit â finalizes the visit, generates the invoice, and (if the client has an email on file) sends the summary email with the customer notes.
- Continue Later â saves the draft immediately and returns to the visit list. Nothing is lost; the visit stays exactly where it was.
- Start Over â asks for confirmation, then wipes everything captured so far for this visit: both note fields, diagnosis, template answers, extra items, and every already-uploaded photo, voice note, and video. The visit itself stays open, ready for a clean take.
Start Over deletes real uploaded content the moment it's confirmed. There's no undo.
Working offline
The top-right of every screen shows a connection dot and a sync summary. Photos, voice notes, and videos each try to upload the instant they're captured â if that fails (or there's genuinely no signal), they're held locally and retried automatically the next time the app can reach the server, with no action needed. A visit saved while offline queues the same way; a Sync Now button is there if you'd rather not wait.
After the visit: the summary dashboard
Once a visit is marked done, tapping it opens a read-only summary instead of the capture form â a card for the visit's basics, then one card per thing actually captured (photos, voice notes, video, prescriptions, treated animals, template answers). Nothing shows up empty.
One thing still isn't frozen: both note fields stay editable here, each with its own Save button, so a follow-up thought after the fact doesn't need a whole new visit.
Vet Questions
Vet Questions lists two queues: customer questions the bot escalated because it wasn't confident answering, and pending prescription renewal requests. Everything here is answered or decided as whichever vet is currently signed in â there's no "answering as" picker anymore.
Approving a renewal isn't a rubber stamp: the medication, quantity, and expiration date are all editable right there, defaulting to the original prescription's own values, plus an optional note to the client. Denying, like approving, is final â both move the request into the handled list below.
An answered question â bot- or vet-answered â can also be featured on the public FAQ, a deliberate opt-in rather than anything automatic. Featuring one opens editable question/answer fields pre-filled from the original, since the public page needs anything identifying the client or animal rewritten out before it goes live.
Calendar sync
Each vet has their own subscribe-by-URL calendar feed â set up from Admin â Vets â that Outlook, Apple Calendar, or Google Calendar can follow directly. It's one-way: the calendar app displays the schedule, nothing written there comes back into VetVisits. If a link is ever compromised, regenerating it from Admin issues a fresh one without touching the vet's own record.
Also on this app
- Invoices â every invoice this vet's visits have generated.
- Prescriptions â a lookup across every prescription written, visit-linked or a standalone phone-in refill; writing one here attributes it to whichever vet is signed in.
Application vétérinaire
vetvisits.fredmorin.dev/vetL'application que le vétérinaire apporte réellement sur le terrain : les visites du jour, un formulaire de capture pour les notes/photos/voix/vidéo, ainsi que la consultation des factures et des prescriptions. Conçue pour continuer à fonctionner sans signal et se resynchroniser dÚs qu'un signal revient.
Connexion
Ce lien de dĂ©mo ne demande aucun mot de passe d'accĂšs â vĂ©tĂ©rinaire, rĂ©partition et admin sont tous directement accessibles. (Un vrai dĂ©ploiement placerait les trois derriĂšre un seul mot de passe d'accĂšs partagĂ©, sans compte individuel Ă ce niveau â le mĂ©canisme existe toujours, simplement dĂ©sactivĂ© pour cette dĂ©mo publique.)
La section vĂ©tĂ©rinaire ajoute une Ă©tape : un menu dĂ©roulant des vĂ©tĂ©rinaires actifs, sans mot de passe. Choisissez un nom et vous ĂȘtes connectĂ© pour 30 jours; Se dĂ©connecter dans l'en-tĂȘte vous ramĂšne Ă ce menu.
Visites du jour
L'Ă©cran d'accueil affiche par dĂ©faut Aujourd'hui, avec Cette semaine et Tout Ă cĂŽtĂ© â la mĂȘme liste, simplement filtrĂ©e diffĂ©remment, pour ne pas avoir Ă ouvrir le calendrier de RĂ©partition juste pour planifier Ă l'avance. Chaque ligne montre le client, l'animal (ou « Visite de troupeau » pour un arrĂȘt Ă l'Ă©chelle de la ferme), l'heure et un statut :
Travailler sur une visite
Ouvrir une visite rĂ©partie mĂšne directement au formulaire de capture, avec un lien de retour vers les visites du jour en haut de l'Ă©cran, au cas oĂč elle aurait Ă©tĂ© ouverte par erreur ou qu'autre chose doive ĂȘtre vĂ©rifiĂ© d'abord. Tout ce qui s'y trouve s'enregistre automatiquement quelques secondes aprĂšs avoir cessĂ© d'Ă©crire â une ligne de statut au-dessus du formulaire indique Enregistrement⊠/ ProgrĂšs enregistrĂ© / Hors ligne, pour toujours savoir oĂč on en est.
Deux champs de notes, volontairement
RĂ©servĂ©es au personnel. Ne quittent jamais la clinique â ni sur une facture, ni dans un courriel.
Le seul champ de notes qui atteint le client â c'est ce qui est rĂ©ellement insĂ©rĂ© dans son courriel de rĂ©sumĂ© de visite une fois la visite finalisĂ©e. Ă utiliser pour le mot de la fin amical, pas pour une remarque interne.
Photos
Touchez Ajouter pour prendre ou choisir une photo. Elle mĂšne directement Ă un outil d'annotation simple â dessinez dessus au besoin, ou touchez simplement Enregistrer pour l'accepter telle quelle. Les photos sont tĂ©lĂ©versĂ©es en arriĂšre-plan dĂšs leur capture; en cas d'Ă©chec, un petit badge rouge de nouvelle tentative apparaĂźt sur la vignette.
Notes vocales
Touchez Enregistrer une note vocale pour dĂ©marrer l'enregistrement, touchez de nouveau pour l'arrĂȘter. Lisible immĂ©diatement, tĂ©lĂ©versĂ©e en arriĂšre-plan. Un Ă©chec de tĂ©lĂ©versement affiche un message « Pas encore envoyĂ©e » avec son propre lien de nouvelle tentative.
Vidéo
Touchez Enregistrer une vidĂ©o â un enregistreur plein Ă©cran s'ouvre en utilisant la camĂ©ra arriĂšre par dĂ©faut (le vĂ©tĂ©rinaire filme un animal, pas un Ă©goportrait). Utilisez le bouton d'inversion avant de dĂ©marrer si la camĂ©ra avant est rĂ©ellement nĂ©cessaire. L'enregistrement s'arrĂȘte automatiquement Ă 60 secondes et se tĂ©lĂ©verse en arriĂšre-plan, avec le mĂȘme mĂ©canisme de nouvelle tentative que les photos et notes vocales.
Prescriptions et autres animaux traités
Le panneau des prescriptions inscrit une prescription pour l'animal principal de la visite. Pour une visite de troupeau â ou toute visite oĂč plus d'un animal a Ă©tĂ© traitĂ© â utilisez + Ajouter un animal pour consigner sĂ©parĂ©ment le diagnostic, les notes et les prescriptions de chaque animal additionnel; le tout est intĂ©grĂ© Ă la mĂȘme facture.
Questions du modÚle et articles supplémentaires
Les questions dĂ©finies par le modĂšle de la visite (vaccin administrĂ©, symptĂŽmes observĂ©s, nombre de tĂȘtesâŠ) apparaissent comme un formulaire normal â les questions obligatoires sont indiquĂ©es. En dessous, Ajouter autre chose permet de choisir librement une quantitĂ© dans le catalogue de prix complet, pour tout ce qui n'est pas dĂ©jĂ couvert par une rĂ©ponse du modĂšle.
Conclure la visite
Trois boutons, fixés en bas de l'écran pour rester toujours accessibles :
- Enregistrer la visite â finalise la visite, gĂ©nĂšre la facture et (si le client a un courriel au dossier) envoie le courriel de rĂ©sumĂ© avec les notes pour le client.
- Continuer plus tard â enregistre immĂ©diatement le brouillon et retourne Ă la liste des visites. Rien n'est perdu; la visite reste exactement oĂč elle en Ă©tait.
- Recommencer â demande une confirmation, puis efface tout ce qui a Ă©tĂ© capturĂ© jusqu'ici pour cette visite : les deux champs de notes, le diagnostic, les rĂ©ponses du modĂšle, les articles supplĂ©mentaires, ainsi que chaque photo, note vocale et vidĂ©o dĂ©jĂ tĂ©lĂ©versĂ©e. La visite elle-mĂȘme reste ouverte, prĂȘte pour une reprise Ă zĂ©ro.
Recommencer supprime du contenu réellement téléversé dÚs la confirmation. Il n'y a aucun retour en arriÚre.
Travailler hors ligne
Le coin supĂ©rieur droit de chaque Ă©cran affiche un indicateur de connexion et un rĂ©sumĂ© de synchronisation. Les photos, notes vocales et vidĂ©os tentent chacune de se tĂ©lĂ©verser dĂšs leur capture â en cas d'Ă©chec (ou d'absence rĂ©elle de signal), elles sont conservĂ©es localement et retentĂ©es automatiquement dĂšs que l'application peut rejoindre le serveur, sans aucune action requise. Une visite enregistrĂ©e hors ligne est mise en file d'attente de la mĂȘme façon; un bouton Synchroniser maintenant est disponible pour ne pas avoir Ă attendre.
AprÚs la visite : le tableau de résumé
Une fois une visite marquĂ©e comme terminĂ©e, la toucher ouvre un rĂ©sumĂ© en lecture seule plutĂŽt que le formulaire de capture â une carte pour les informations de base de la visite, puis une carte par Ă©lĂ©ment rĂ©ellement capturĂ© (photos, notes vocales, vidĂ©o, prescriptions, animaux traitĂ©s, rĂ©ponses du modĂšle). Rien n'apparaĂźt vide.
Une chose n'est toujours pas figée : les deux champs de notes restent modifiables ici, chacun avec son propre bouton Enregistrer, pour qu'une réflexion aprÚs coup n'exige pas une toute nouvelle visite.
Questions clients
Questions clients liste deux files : les questions de clients que le robot a transmises faute d'ĂȘtre assez confiant pour y rĂ©pondre, et les demandes de renouvellement de prescription en attente. Tout y est rĂ©pondu ou dĂ©cidĂ© au nom du vĂ©tĂ©rinaire actuellement connectĂ© â il n'y a plus de sĂ©lecteur « rĂ©pondre en tant que ».
Approuver un renouvellement n'est pas automatique : le mĂ©dicament, la quantitĂ© et la date d'expiration sont tous modifiables directement lĂ , avec les valeurs de la prescription d'origine par dĂ©faut, en plus d'une note facultative pour le client. Refuser, comme approuver, est dĂ©finitif â les deux dĂ©placent la demande vers la liste des demandes traitĂ©es ci-dessous.
Une question rĂ©pondue â par le robot ou par un vĂ©tĂ©rinaire â peut aussi ĂȘtre mise en vedette Ă la FAQ publique, une action dĂ©libĂ©rĂ©e plutĂŽt qu'automatique. La mettre en vedette ouvre des champs de question/rĂ©ponse modifiables, prĂ©remplis Ă partir de l'original, car la page publique exige que tout ce qui identifie le client ou l'animal soit retirĂ© avant publication.
Synchronisation du calendrier
Chaque vĂ©tĂ©rinaire dispose de son propre lien d'abonnement au calendrier â configurĂ© depuis Admin â VĂ©tĂ©rinaires â qu'Outlook, Apple Calendrier ou Google Agenda peut suivre directement. C'est Ă sens unique : l'application de calendrier affiche l'horaire, rien de ce qui y est Ă©crit ne revient dans VetVisits. Si un lien est un jour compromis, le rĂ©gĂ©nĂ©rer depuis Admin en Ă©met un nouveau sans toucher au dossier du vĂ©tĂ©rinaire.
Aussi dans cette application
- Factures â toutes les factures gĂ©nĂ©rĂ©es par les visites de ce vĂ©tĂ©rinaire.
- Prescriptions â une recherche parmi toutes les prescriptions Ă©crites, liĂ©es Ă une visite ou en renouvellement tĂ©lĂ©phonique autonome; en Ă©crire une ici l'attribue au vĂ©tĂ©rinaire actuellement connectĂ©.
Dispatch
vetvisits.fredmorin.dev/dispatchWhere a visit gets turned from "someone called" into "a vet is on their way" â booking, assigning, and a full drag-and-drop calendar. Same sign-in as the other staff apps â see the Vet app page.
The board
The home screen lists every visit in one of five buckets, in this order: Unscheduled, Needs Dispatch, Dispatched, In Progress, Completed. A Dispatch button appears only on rows waiting to go out â tapping it is the actual "send it to the vet's phone" action; the visit then shows up on that vet's own Today's Visits list.
Booking a new appointment
- Open + New Appointment from the board.
- Pick the client (a farm's own record), then the animal â or check the herd-visit toggle to skip picking one specific animal (used for a farm-level stop like a routine monthly checkup).
- Pick a visit type. Choosing one auto-fills the usual duration for that type.
- Assign a vet, and optionally an assistant and any equipment the visit needs.
- Set the date/time and duration, or check the unscheduled toggle to skip a slot entirely â it'll land in the calendar's Unscheduled Pool for later placement.
- Submit with Create Appointment.
As soon as a vet, assistant, equipment, time, and duration are all set, the form checks for anything already booked in that window â and for any of them marked unavailable in Admin (time off, equipment out of service) â and shows exactly who or what overlaps. It's advisory â the form still submits even with a conflict showing, in case it's intentional.
The calendar
Toggle between Day (one column per vet) and Week (one column per day, every vet mixed in) â click a day header in Week view to jump straight into Day view for that date. A third toggle, Map, plots that same day's visits as pins on a map â useful for a big territory where drive time between farms is a real cost, at a glance rather than by reading times off a grid. Pins only, no route line or reordering; tap one for the client, animal, time, and vet.
- Unscheduled Pool â a strip above the grid listing every unscheduled visit as a small card. Drag one onto a vet's column at any time to schedule it in one motion.
- Drag to move â any visit that hasn't started yet (unscheduled, scheduled, or dispatched â never once a vet has actually begun it) can be dragged to a new time or a different vet. Drops snap to 15 minutes.
- Resize â drag the handle on a visit block's bottom edge to stretch or shrink its duration right on the grid.
- Double-click to edit â opens a modal with template, vet, assistant, equipment, time, duration, and the visit's internal notes, with the same unavailability warning as the booking form above.
Any drag, resize, or modal save that changes the time or duration prompts a yes/no: send the client a reschedule confirmation email? It's a deliberate per-change choice, not automatic â declining just applies the change silently.
If two people edit the same visit at nearly the same moment, the second save is rejected with a reload prompt rather than silently overwriting the first.
What lives in Admin instead
Clients, animals, vets, assistants, equipment, and visit templates are all managed in the Admin app â Dispatch only reads those lists to populate its own dropdowns.
Répartition
vetvisits.fredmorin.dev/dispatchL'endroit oĂč une visite passe de « quelqu'un a appelĂ© » à « un vĂ©tĂ©rinaire est en route » â rĂ©servation, assignation et un calendrier complet Ă glisser-dĂ©poser. MĂȘme connexion que les autres applications du personnel â voir la page de l'application vĂ©tĂ©rinaire.
Le tableau
L'Ă©cran d'accueil liste chaque visite dans l'un de cinq groupes, dans cet ordre : Non planifiĂ©, Ă rĂ©partir, RĂ©parti, En cours, TerminĂ©. Un bouton RĂ©partir n'apparaĂźt que sur les lignes en attente d'envoi â le toucher est l'action rĂ©elle qui envoie la visite au tĂ©lĂ©phone du vĂ©tĂ©rinaire; elle apparaĂźt alors dans la liste des visites du jour de ce vĂ©tĂ©rinaire.
Réserver un nouveau rendez-vous
- Ouvrez + Nouveau rendez-vous Ă partir du tableau.
- Choisissez le client (ferme / client), puis l'animal â ou cochez l'option de visite de troupeau pour Ă©viter de choisir un animal prĂ©cis (utile pour un arrĂȘt Ă l'Ă©chelle de la ferme, comme une visite mensuelle de routine).
- Choisissez un type de visite (modÚle de visite). En choisir un remplit automatiquement la durée habituelle pour ce type.
- Assignez un vétérinaire, et facultativement un assistant ainsi que tout équipement requis pour la visite.
- Fixez la date, l'heure et la durĂ©e, ou cochez l'option non planifiĂ© pour ne pas fixer de crĂ©neau du tout â la visite se retrouvera dans le bassin non planifiĂ© du calendrier pour ĂȘtre placĂ©e plus tard.
- Soumettez avec Créer le rendez-vous.
DĂšs qu'un vĂ©tĂ©rinaire, un assistant, un Ă©quipement, une heure et une durĂ©e sont tous fixĂ©s, le formulaire vĂ©rifie si quelque chose est dĂ©jĂ rĂ©servĂ© dans ce crĂ©neau â ainsi que si l'un d'eux est marquĂ© indisponible dans Admin (congĂ©, Ă©quipement hors service) â et montre exactement qui ou quoi est en conflit. C'est un avertissement seulement â le formulaire peut quand mĂȘme ĂȘtre soumis mĂȘme si un conflit est affichĂ©, au cas oĂč ce serait intentionnel.
Le calendrier
Basculez entre Jour (une colonne par vĂ©tĂ©rinaire) et Semaine (une colonne par jour, tous les vĂ©tĂ©rinaires mĂ©langĂ©s) â cliquez sur l'en-tĂȘte d'un jour en vue Semaine pour passer directement Ă la vue Jour de cette date. Un troisiĂšme bouton, Carte, affiche les visites de cette mĂȘme journĂ©e sous forme de points sur une carte â utile pour un grand territoire oĂč le temps de route entre les fermes est un coĂ»t rĂ©el, d'un coup d'Ćil plutĂŽt qu'en lisant les heures sur une grille. Seulement des points, sans trajet ni rĂ©ordonnancement; touchez-en un pour voir le client, l'animal, l'heure et le vĂ©tĂ©rinaire.
- Non planifiĂ©s â une bande au-dessus de la grille listant chaque visite non planifiĂ©e sous forme de petite carte. Glissez-en une sur la colonne d'un vĂ©tĂ©rinaire, Ă n'importe quelle heure, pour la planifier en un seul geste.
- Glisser pour dĂ©placer â toute visite qui n'a pas encore commencĂ© (non planifiĂ©e, planifiĂ©e ou rĂ©partie â jamais une fois qu'un vĂ©tĂ©rinaire l'a rĂ©ellement dĂ©butĂ©e) peut ĂȘtre glissĂ©e vers une nouvelle heure ou un autre vĂ©tĂ©rinaire. Les dĂ©pĂŽts s'ajustent par tranches de 15 minutes.
- Redimensionner â glissez la poignĂ©e au bas d'un bloc de visite pour allonger ou raccourcir sa durĂ©e directement sur la grille.
- Double-cliquer pour modifier â ouvre une fenĂȘtre avec le modĂšle, le vĂ©tĂ©rinaire, l'assistant, l'Ă©quipement, l'heure, la durĂ©e et les notes internes de la visite, avec le mĂȘme avertissement d'indisponibilitĂ© que le formulaire de rĂ©servation ci-dessus.
Tout glissement, redimensionnement ou enregistrement qui change l'heure ou la durĂ©e dĂ©clenche une question oui/non : envoyer au client un courriel de confirmation du changement d'horaire? C'est un choix dĂ©libĂ©rĂ© Ă chaque modification, pas automatique â refuser applique simplement le changement en silence.
Si deux personnes modifient la mĂȘme visite presque au mĂȘme moment, le second enregistrement est refusĂ© avec une invitation Ă recharger plutĂŽt que d'Ă©craser silencieusement le premier.
Ce qui se trouve plutĂŽt dans Admin
Les clients, les animaux, les vĂ©tĂ©rinaires, les assistants, l'Ă©quipement et les modĂšles de visite sont tous gĂ©rĂ©s dans l'application Admin â RĂ©partition ne fait que lire ces listes pour remplir ses propres menus dĂ©roulants.
Admin
vetvisits.fredmorin.dev/adminThe back office â a dashboard for at-a-glance status, a place to review any visit in depth, order fulfillment, and every configuration screen the other three apps quietly depend on.
Dashboard
Ten independent widgets â recent visits, the unscheduled pool count, needs-dispatch count, today's schedule, a 7-day upcoming chart, campaign reminder counts, pending orders, prescriptions issued this week, revenue this week, and a system health card (mail sending, active staff counts).
Tap Customize to remove, reorder, or re-add any widget â the layout is remembered per browser. Every row in Recent visits is a link: a completed one shows the actual date and time it closed and opens straight into that visit's full summary.
Reviewing a visit
Opening any visit from the dashboard (or anywhere else it's linked) shows the same dashboard-style summary a vet sees once their own visit is done: a summary card, then one card per thing actually captured. Both the internal and customer note fields are editable right there, each saving independently.
Orders
Every order a client has placed through the Customer Portal â supplies or a prescription refill â lands here as Submitted, along with any note the customer left at checkout. There's no automatic notification to a vet; a staff member reviews the queue and marks each one Fulfilled once it's ready.
Everything else, by nav group
| Group | Page | What it's for |
|---|---|---|
| Configuration | Visit Templates | Define visit types and their questions, whether treatment entries are allowed, and a reminder interval for automatic recall. An optional French name shows in place of the English one everywhere the type appears, for French-locale customers and staff. |
| Configuration | Price Catalog | Every billable service and medication, and its price. |
| Configuration | Option Lists | Reusable dropdown choices for template questions. |
| People | Vets / Assistants | Staff who can be assigned to a visit, each with its own Availability panel for time off â Dispatch warns (but doesn't block) if you book over it. |
| People | Clients | Client records â email (enables portal login and visit-summary emails), preferred language for automatic emails, and Edit details for address, phone, and a specific contact person on file. |
| People | Animals | Every animal across every client. |
| Operations | Campaigns | Recall reminders, reviewed and sent manually, not blasted automatically. |
| Operations | Orders | The fulfillment queue described above. |
| Operations | Equipment | Bookable equipment for the dispatch form and calendar, with the same time-off availability panel as vets and assistants. |
| System | Settings | Three switches: whether prices show on the vet's capture screen, whether the clinic books weekend appointments at all, and whether the customer portal shows sponsored product ads (off by default â a deliberate reveal for demonstrating the ad-revenue angle). |
| System | Email Templates | Every automatic email this app sends â login codes, booking and reschedule confirmations, visit summaries, prescription and renewal notices, campaign reminders. Pick a template on the left and a language to edit that one's wording in; English and French are customized independently, each falling back to its own default when untouched. A real deployment can also send SMS through a provider like Twilio â not wired up in this demo, to keep it self-contained rather than tied to a paid account just to show it off. |
Admin
vetvisits.fredmorin.dev/adminLe bureau administratif â un tableau de bord pour un aperçu rapide, un endroit pour examiner n'importe quelle visite en dĂ©tail, le traitement des commandes, et tous les Ă©crans de configuration dont dĂ©pendent discrĂštement les trois autres applications.
Tableau de bord
Dix widgets indĂ©pendants â visites rĂ©centes, bassin non planifiĂ©, nombre Ă rĂ©partir, horaire d'aujourd'hui, un graphique des 7 prochains jours, les rappels de campagne, les commandes en attente, les prescriptions Ă©mises cette semaine, les revenus de la semaine, et une carte de santĂ© du systĂšme (envoi de courriels, nombre de membres actifs).
Touchez Personnaliser pour retirer, rĂ©organiser ou rĂ©ajouter n'importe quel widget â la disposition est mĂ©morisĂ©e par navigateur. Chaque ligne dans Visites rĂ©centes est un lien : une visite terminĂ©e montre la date et l'heure rĂ©elles de sa clĂŽture et ouvre directement le rĂ©sumĂ© complet de cette visite.
Examiner une visite
Ouvrir n'importe quelle visite depuis le tableau de bord (ou tout autre endroit oĂč elle est liĂ©e) affiche le mĂȘme rĂ©sumĂ© qu'un vĂ©tĂ©rinaire voit une fois sa propre visite terminĂ©e : une carte de rĂ©sumĂ©, puis une carte par Ă©lĂ©ment rĂ©ellement capturĂ©. Les champs de notes internes et de notes pour le client y sont tous deux modifiables, chacun s'enregistrant indĂ©pendamment.
Commandes
Chaque commande passĂ©e par un client via le portail client â matĂ©riel ou renouvellement d'ordonnance â arrive ici avec le statut Soumise, avec toute note laissĂ©e par le client Ă la caisse. Aucune notification automatique n'est envoyĂ©e Ă un vĂ©tĂ©rinaire; un membre du personnel rĂ©vise la file d'attente et marque chaque commande TraitĂ©e une fois prĂȘte.
Tout le reste, par groupe de navigation
| Groupe | Page | à quoi ça sert |
|---|---|---|
| Configuration | ModĂšles de visite | DĂ©finir les types de visite et leurs questions, si les entrĂ©es de traitement sont permises, et un intervalle de rappel pour le rappel automatique. Un nom français facultatif remplace le nom anglais partout oĂč le type apparaĂźt, pour les clients et le personnel en français. |
| Configuration | Catalogue de prix | Chaque service et médicament facturable, et son prix. |
| Configuration | Listes d'options | Choix réutilisables pour les questions de modÚle. |
| Personnel | VĂ©tĂ©rinaires / Assistants | Le personnel pouvant ĂȘtre assignĂ© Ă une visite, chacun avec son propre panneau DisponibilitĂ©s pour les congĂ©s â RĂ©partition avertit (sans bloquer) en cas de rĂ©servation par-dessus. |
| Personnel | Clients | Dossiers des clients â courriel (active la connexion au portail et les courriels de rĂ©sumĂ© de visite), langue prĂ©fĂ©rĂ©e pour les courriels automatiques, et Modifier les dĂ©tails pour l'adresse, le tĂ©lĂ©phone et une personne-ressource prĂ©cise au dossier. |
| Personnel | Animaux | Chaque animal, pour chaque client. |
| Opérations | Campagnes | Rappels de rappel, révisés et envoyés manuellement, jamais diffusés automatiquement. |
| Opérations | Commandes | La file de traitement décrite ci-dessus. |
| OpĂ©rations | Ăquipement | Ăquipement rĂ©servable pour le formulaire et le calendrier de rĂ©partition, avec le mĂȘme panneau de disponibilitĂ©s que les vĂ©tĂ©rinaires et assistants. |
| SystĂšme | ParamĂštres | Trois interrupteurs : afficher les prix ou non sur l'Ă©cran de capture du vĂ©tĂ©rinaire, si la clinique accepte les rĂ©servations la fin de semaine, et si le portail client affiche des publicitĂ©s de produits commanditĂ©s (dĂ©sactivĂ© par dĂ©faut â une rĂ©vĂ©lation dĂ©libĂ©rĂ©e pour dĂ©montrer le volet revenus publicitaires). |
| SystĂšme | ModĂšles de courriel | Chaque courriel automatique envoyĂ© par l'application â codes de connexion, confirmations de rĂ©servation et de changement de rendez-vous, rĂ©sumĂ©s de visite, avis de prescription et de renouvellement, rappels de campagne. Choisissez un modĂšle Ă gauche et une langue pour en modifier le texte; l'anglais et le français sont personnalisĂ©s indĂ©pendamment, chacun revenant Ă son propre modĂšle par dĂ©faut s'il n'a pas Ă©tĂ© modifiĂ©. Un vrai dĂ©ploiement peut aussi envoyer des SMS via un fournisseur comme Twilio â non branchĂ© dans cette dĂ©mo, pour la garder autonome plutĂŽt que liĂ©e Ă un compte payant juste pour la montrer. |
Customer Portal
portal.fredmorin.devThe one app a client uses directly â no staff passphrase, no account to create. A client can only sign in once their email is already on file (set from Admin â Clients).
Signing in
- Enter the email on file for the client record.
- A 6-digit code arrives by email, valid 10 minutes.
- Enter it to sign in â the session lasts 30 days.
There's no password to set or forget, and no self-registration â if a client's email isn't already in Admin, this screen has nothing to log them into.
Sign in with [email protected] and code 123456 â no real email gets sent for this one account, so there's nothing to wait for.
Home
A welcome, quick links to booking / prescriptions / orders, and a list of the client's own upcoming appointments.
Booking a visit
Pick a visit type first â for one that doesn't need a specific animal named up front (a general farm visit, say), the animal checklist doesn't even appear; for anything that does, it shows right after. Then a date, then a real available time slot â the grid only shows what's actually open. If someone else takes that exact slot in the few seconds before submitting, the page says so and refreshes the options rather than double-booking.
Prescriptions
Every prescription across the client's animals: medication, which animal, instructions, "X of Y remaining," and an expiry date where one applies. An expired one is flagged clearly â and see Prescription Renewal for what a client can (and can't) still do with one.
Order History
A running history of everything the client has ordered â date, a Submitted/Fulfilled status pill, line items, and the total.
Asking a vet a question
A floating chat bubble sits on every portal page once signed in â opening it shows the Ask a vet panel. Routine questions (clinic hours, how to book, deworming/vaccination cadence, billing basics, reordering a prescription) get an instant reply from a simple bot; anything about a specific animal's health goes straight to a vet's queue instead, and the reply shows up back in this same window once it's answered â no need to keep it open and wait.
FAQ
A public page â no sign-in needed â of client questions a vet has chosen to feature, each rewritten to strip out anything that would identify who asked or which animal it was about. Not every answered question ends up here: featuring one is a deliberate step a vet takes from Vet Questions, not something that happens automatically.
Portail client
portal.fredmorin.devLa seule application qu'un client utilise directement â pas de mot de passe du personnel, aucun compte Ă crĂ©er. Un client ne peut se connecter que si son courriel est dĂ©jĂ au dossier (inscrit depuis Admin â Clients).
Connexion
- Entrez le courriel au dossier chez la clinique.
- Un code Ă 6 chiffres arrive par courriel, valide 10 minutes.
- Entrez-le pour vous connecter â la session dure 30 jours.
Aucun mot de passe Ă dĂ©finir ou Ă oublier, et aucune inscription autonome â si le courriel d'un client n'est pas dĂ©jĂ dans Admin, cet Ă©cran n'a rien pour l'y connecter.
Connectez-vous avec [email protected] et le code 123456 â aucun courriel rĂ©el n'est envoyĂ© pour ce compte, il n'y a donc rien Ă attendre.
Accueil
Un message de bienvenue, des liens rapides vers la prise de rendez-vous, les prescriptions et les commandes, ainsi qu'une liste des propres rendez-vous Ă venir du client.
Prendre rendez-vous
Choisissez d'abord un type de visite â pour un type qui n'a pas besoin de nommer un animal prĂ©cis dĂšs le dĂ©part (une visite gĂ©nĂ©rale Ă la ferme, par exemple), la liste des animaux n'apparaĂźt mĂȘme pas; pour tout ce qui en a besoin, elle s'affiche juste aprĂšs. Puis une date, puis un crĂ©neau horaire rĂ©ellement disponible â la grille ne montre que ce qui est vraiment libre. Si quelqu'un d'autre prend exactement ce crĂ©neau dans les quelques secondes avant l'envoi, la page l'indique et rafraĂźchit les options plutĂŽt que de crĂ©er une double rĂ©servation.
Prescriptions
Toutes les prescriptions des animaux du client : mĂ©dicament, pour quel animal, instructions, « X sur Y restants », et une date d'expiration lorsqu'applicable. Une prescription expirĂ©e est clairement indiquĂ©e â voir Renouvellement d'ordonnance pour ce qu'un client peut (et ne peut pas) encore faire avec.
Historique des commandes
Un historique complet de tout ce que le client a commandĂ© â date, statut Soumise/TraitĂ©e, articles, et le total.
Poser une question à un vétérinaire
Une bulle de clavardage flottante apparaĂźt sur chaque page du portail une fois connectĂ© â l'ouvrir affiche le panneau Poser une question. Les questions courantes (heures d'ouverture, comment rĂ©server, frĂ©quence de vermifugation ou de vaccination, notions de facturation, renouveler une prescription) reçoivent une rĂ©ponse instantanĂ©e d'un robot simple; tout ce qui concerne la santĂ© d'un animal prĂ©cis est plutĂŽt transmis directement Ă la file d'un vĂ©tĂ©rinaire, et la rĂ©ponse apparaĂźt dans cette mĂȘme fenĂȘtre une fois qu'elle est donnĂ©e â pas besoin de la garder ouverte en attendant.
FAQ
Une page publique â aucune connexion requise â des questions de clients qu'un vĂ©tĂ©rinaire a choisi de mettre en vedette, chacune reformulĂ©e pour retirer tout ce qui identifierait qui l'a posĂ©e ou de quel animal il s'agit. Toutes les questions rĂ©pondues ne s'y retrouvent pas : la mettre en vedette est une Ă©tape dĂ©libĂ©rĂ©e qu'un vĂ©tĂ©rinaire fait depuis Questions clients, pas quelque chose d'automatique.
Prescription Renewal
portal.fredmorin.dev/portal/orderTwo different paths, depending on whether there's still quantity left. A prescription that isn't expired and has quantity remaining is refilled by placing an order against it, on the same Order page a client uses to buy ordinary supplies. One that's expired gets a distinct Request renewal button instead â see below.
How a client actually does it
- From Prescriptions, tap Order this on anything still valid with quantity left â this is the only place that button appears. It lands directly on that exact medication, highlighted, in the Order page's Medications list, rather than a generic order screen you'd have to scroll through to find it again.
- The Order page's Medications section lists every prescription the client's animals still have remaining authorization on, each showing "X of Y remaining" for its animal.
- Set a quantity â the field itself won't let you exceed what's actually left â and add it to the cart. Adding the same item again bumps that line's quantity rather than creating a second one.
- Add any ordinary supplies the same way, an optional note for the clinic if there's anything they should know, then tap Review order.
- A review screen recaps every line, the note, and the total â Back to change anything, or Confirm order to actually place it.
What happens on submit
The server checks everything again independently before accepting the order: the quantity is at least 1, a medication line has a matching prescription (a supply line must not), that prescription belongs to that client's own animal, isn't expired, and the amount requested doesn't exceed what's genuinely still remaining â computed fresh from every order ever placed against it, not a counter that could drift. Any violation comes back as a specific, readable error and returns to the cart to fix it, instead of a generic failure.
A successful order is created as Submitted straight into the Admin Orders queue, note included.
Nothing here notifies a vet or asks for sign-off â placing the order is the whole client-side action. Fulfillment is purely an Admin-side staff task from that point on.
Requesting a renewal
Once a prescription is expired, its Order this button disappears from the Prescriptions page and Request renewal takes its place right there â not on the Order page, since there's no valid authorization left to order against.
Tapping it sets the prescription to Renewal requested â waiting on a vet. Whichever vet is currently signed in reviews the request from Vet Questions (see the Vet app's own handbook page) â approving isn't a rubber stamp there: the medication, quantity, and expiration date are all editable before it's confirmed, defaulting to the original prescription's own values. Approving issues a brand-new prescription; the client sees Renewal approved and finds it back on this same page.
A denied request shows Renewal request denied but isn't a dead end â the same button reappears immediately, ready to ask again.
Renouvellement d'ordonnance
portal.fredmorin.dev/portal/orderDeux parcours diffĂ©rents, selon qu'il reste ou non de la quantitĂ©. Une prescription non expirĂ©e avec de la quantitĂ© restante se renouvelle en passant une commande sur celle-ci, sur la mĂȘme page Commander qu'un client utilise pour acheter du matĂ©riel ordinaire. Une prescription expirĂ©e obtient plutĂŽt un bouton distinct Demander un renouvellement â voir ci-dessous.
Comment un client procÚde réellement
- Depuis Prescriptions, touchez Commander sur toute prescription encore valide avec de la quantitĂ© restante â c'est le seul endroit oĂč ce bouton apparaĂźt. Il mĂšne directement Ă ce mĂ©dicament prĂ©cis, mis en Ă©vidence dans la liste des mĂ©dicaments de la page Commander, plutĂŽt qu'un Ă©cran de commande gĂ©nĂ©rique Ă parcourir pour le retrouver.
- La section Médicaments de la page Commander liste chaque prescription pour laquelle les animaux du client ont encore une autorisation restante, chacune affichant « X sur Y restants » pour son animal.
- Fixez une quantitĂ© â le champ lui-mĂȘme ne permet pas de dĂ©passer ce qui reste rĂ©ellement â puis ajoutez-la au panier. Ajouter le mĂȘme article de nouveau augmente la quantitĂ© de cette ligne plutĂŽt que d'en crĂ©er une seconde.
- Ajoutez de la mĂȘme façon tout matĂ©riel ordinaire, une note facultative pour la clinique s'il y a quelque chose Ă signaler, puis touchez RĂ©viser la commande.
- Un Ă©cran de rĂ©vision rĂ©capitule chaque ligne, la note et le total â Retour pour modifier quelque chose, ou Confirmer la commande pour la passer rĂ©ellement.
Ce qui se passe Ă la soumission
Le serveur revĂ©rifie tout de façon indĂ©pendante avant d'accepter la commande : la quantitĂ© est d'au moins 1, une ligne de mĂ©dicament correspond Ă une prescription (une ligne de matĂ©riel ne doit pas en avoir), cette prescription appartient bien Ă un animal de ce client, n'est pas expirĂ©e, et la quantitĂ© demandĂ©e ne dĂ©passe pas ce qui reste rĂ©ellement â calculĂ© Ă neuf Ă partir de toutes les commandes dĂ©jĂ passĂ©es sur cette prescription, plutĂŽt qu'un compteur qui pourrait dĂ©river. Toute violation renvoie une erreur prĂ©cise et lisible et retourne au panier pour la corriger, plutĂŽt qu'un Ă©chec gĂ©nĂ©rique.
Une commande réussie est créée avec le statut Soumise, directement dans la file des commandes de l'application Admin, note incluse.
Rien ici n'avise un vĂ©tĂ©rinaire ni ne demande d'approbation â passer la commande est toute l'action cĂŽtĂ© client. Le traitement est ensuite une tĂąche purement administrative du personnel.
Demander un renouvellement
Une fois une prescription expirĂ©e, son bouton Commander disparaĂźt de la page Prescriptions et Demander un renouvellement prend sa place, directement lĂ â pas sur la page Commander, puisqu'il ne reste plus d'autorisation valide Ă commander.
Le toucher passe la prescription Ă Renouvellement demandĂ© â en attente d'un vĂ©tĂ©rinaire. Le vĂ©tĂ©rinaire actuellement connectĂ© rĂ©vise la demande depuis Questions clients (voir la page du guide sur l'application vĂ©tĂ©rinaire) â approuver n'y est pas une formalitĂ© : le mĂ©dicament, la quantitĂ© et la date d'expiration sont tous modifiables avant confirmation, avec les valeurs de la prescription d'origine par dĂ©faut. Approuver Ă©met une toute nouvelle prescription; le client voit Renouvellement approuvĂ© et la retrouve sur cette mĂȘme page.
Une demande refusĂ©e affiche Demande de renouvellement refusĂ©e mais ne mĂšne pas Ă une impasse â le mĂȘme bouton rĂ©apparaĂźt aussitĂŽt, prĂȘt Ă demander de nouveau.