Product
What TaskPaws does
Clinic software for veterinarians, technicians, and front-desk staff. The web app is the clinic workspace; iOS and Android will expose the same workflows on the floor.
Public routes
| Path | Page |
|---|---|
/ | Landing (features, pricing, FAQs, trial CTA) |
/login | Staff email/password plus Google, Apple, Facebook |
/register | Create account / start trial (provisions tenant) |
/app | Staff workspace home (signed-in User) |
/app/patients | Patient charts, admission, visit/appointment history |
/app/schedule | Location appointment calendar |
/app/whiteboard | Location Floor / Pipeline visits board |
/app/catalog | Master catalog and Location price/enabled overrides |
/app/inventory | Per-Location on-hand stock |
/app/billing | Redirects to Settings → Billing (SaaS plans, card, upgrades/downgrades, invoices) |
/admin/login | SuperUser login |
/admin | Admin dashboard (signed-in SuperUser) |
/admin/users | Staff accounts table (Impersonate) |
/admin/super_users | Super admins (CRUD) |
/admin/organizations | Organizations directory (trial days; billed plan change when subscribed) |
/admin/billing_transactions | SaaS charges past and upcoming |
/admin/roles | Global RBAC role catalog (CRUD) |
/admin/actions | Global RBAC action catalog (CRUD) |
/admin/audits | Account field audit log |
/admin/settings | Platform operator settings (default free-trial length) |
/privacy | Privacy policy |
/terms | Terms of service |
/facebook/deletion | Facebook data deletion callback and status |
/locale/:locale | Set language cookie (en / es) |
/wiki | HTML wiki (files in wiki/; linked from footers) |
/up | Health check |
Marketing landing (/)
Public homepage. English or Spanish from the browser language.
| Section | Behavior |
|---|---|
| Hero | Headline, lead, start-trial to /register, “see how it works” to #features |
| Features | Feature cards from AppFeature landing translations |
| Pricing | Plan tiers (Starter, Business, Elite) plus FAQs from YAML |
| Quote | Testimonial block |
| Trial CTA | Primary /register, secondary /login, trial-length note from the platform setting |
Nav: Home, Features (/#features), Pricing (/#pricing), Log in, Get started, language switcher (EN/ES). Mobile nav collapses behind a menu. Footer Privacy and Terms go to /privacy and /terms. Wiki goes to /wiki. About, Contact, and API docs are placeholders. Plan/feature marketing prose is maintained at Admin /admin/translations (see docs/architecture/translations.md).
Log in and register
Log in (/login)
Staff log in with email and password. A valid UserSession redirects to /app. Google, Apple, and Facebook POST to OmniAuth and create or resume a User (and persist provider tokens). Super users use /admin/login, not this page.
Acceptance: page renders, fields required, invalid credentials re-render the form, successful login opens staff home.
Create account (/register)
14-day trial with first name, last name, email, password, and clinic name. No credit card. Submitting creates a User, provisions Organization + Legal Entity + Location + Staff with an org-wide Organization administrator assignment, starts a session, redirects to /app. New social signup always lands here to name the clinic.
Starter and Business CTAs go here. Elite’s CTA is “Contact sales” and is not a live form.
Staff home and Admin
Staff home (/app) — signed-in User gets a workspace shell (sidebar, header, footer) with the marketing teal palette. Home greets by first name and shows placeholder clinic cards. The header shows the current Location name (or Organization when selected) and remaining trial days while on trial. When the Staff has more than one granted Location, a sidebar switcher lists Organization and Locations; PATCH /app/workspace stores the choice. New Visit opens a walk-in on the whiteboard when the Staff may manage visits. Settings (/app/settings) is live for Organization administrators, Organization managers (read), and Location administrators — including the Billing tab (subscribe, upgrade/downgrade, invoices). Patients, schedule, whiteboard, catalog, and inventory are live. Messages and reports remain sidebar placeholders. After the trial ends, a persistent banner links to Settings → Billing. A control collapses the sidebar to icons.
Admin (/admin) — platform operators (SuperUser) log in at /admin/login. The first SuperUser is seeded; additional operators are created at /admin/super_users. Staff User sessions cannot open /admin.
| Surface | Behavior |
|---|---|
Dashboard (GET /admin) | Counts for staff, active staff (7 days), super admins, and social logins. Clicking a card filters the Overview table |
| Overview / Activity / Compliance tabs | Selected records; recent sign-ins; Facebook deletions plus recent audits |
| Users | All clinic staff accounts. Impersonate opens /app as that User |
| Super admins | CRUD platform operators. The last SuperUser and the signed-in operator cannot be deleted |
| Organizations | Directory of persisted Organizations (name, location count, remaining trial days, plan). SuperUsers can set remaining days; changing plan_id on a subscribed org runs Billing::PlanChange |
| Billing transactions | Past SaaS charges (incl. plan changes) and upcoming renewals |
| Roles | Global RBAC role catalog (CRUD; system roles cannot be deleted) |
| Actions | Global permission catalog (CRUD; system actions cannot be deleted) |
| Settings | Signed-in operator, default free-trial length (new Organizations only), staff social-login providers, languages, link to the audit trail |
| Audit log | Name/email create/update/destroy as Field: old value ---> new value (muted old value, teal new value) |
Search, export, and notifications are visible but not wired. The account menu switches English/Spanish.
Privacy and terms
Public legal pages in English and Spanish. Last updated 22 August 2026. They describe the intended product; they are not a substitute for implemented clinic features.
- Privacy: who we are, data we collect, use and sharing, SMS/email, social login, storage, rights, children, contact.
- Terms: service, accounts, billing, clinic data, acceptable use, third parties, not veterinary advice, availability, disclaimers, liability, indemnity, termination, contact.
Facebook data deletion (/facebook/deletion) — Facebook POSTs a signed request when someone removes TaskPaws or asks Facebook to delete app data. TaskPaws unlinks the Facebook SocialIdentity and returns a confirmation URL. The GET page shows status for that code. The TaskPaws account stays unless support removes it.
Locale
| Browser language | UI |
|---|---|
Spanish preferred (es, es-AR, …) | Spanish |
| Anything else, or missing header | English |
The marketing nav, /app profile menu, and Admin account menu switch English/Spanish (GET /locale/:locale sets a cookie). Otherwise the UI follows Accept-Language. ApplicationController wraps every request in I18n.with_locale(AppLocale.from_request(request)).
Plans and trial
Prices are USD per month.
| Plan | Price | Audience | Includes | CTA |
|---|---|---|---|---|
| Starter | $239 | Independent vets | Patient records, basic scheduling, email support | Start Starter trial → /register |
| Business | $449 | Growing clinics | Starter plus SMS reminders, multi-user access, analytics | Start Business trial → /register |
| Elite | $899 | Multi-location practices | Business plus priority support, API, custom branding | Contact sales (placeholder) |
Business is marked most popular. Trial: fully featured during the free-trial window (default 14 days via PlatformSetting.free_trial_days) plus 5 testing credits on provision. SuperUsers can change that default and remaining days per Organization. Subscribe under Settings → Billing (Stripe PaymentIntents): ends the trial, clears remaining testing credits, grants plan credits × locations. Upgrades apply immediately with a prorated charge; downgrades take effect on the next renewal (blocked if over the target plan’s caps). Details: docs/functional/saas-billing.md.
FAQs: migrating data (onboarding on Business/Elite, no downtime goal); free trial yes; changing plan yes from Settings → Billing (upgrade now / downgrade at renewal); auto-recharge below 10% of cycle credits.
Intended clinic features
Landing-page promises. Several are partially shipped on web; the rest must still work the same on web and mobile when built.
| Feature | Intent | Status |
|---|---|---|
| Smart scheduling | Calendar with rooms, staff, recurrence | Web schedule shipped |
| Patient records | Charts, SOAP, history (voice-to-text later) | SOAP + history shipped |
| Analytics dashboard | Appointment trends and inventory levels | Later |
| SMS reminders | Reminders and messaging | Later |
| Email support | Support by email | Ops |
| Multi-user access | Separate logins and RBAC | Shipped |
| Priority support | Faster response for Elite | Elite |
| API access | Labs, billing, other tools (Elite public API) | Staff API shipped |
| Custom branding | Clinic branding on client-facing surfaces | Elite |
Actors
User, SuperUser, Organization, LegalEntity, Location, Staff, Client, Patient, Appointment, and Visit persist.
| Actor | Login | Scope |
|---|---|---|
| Organization | — | Tenant. Owns Legal Entities, Locations, Staff memberships, master catalog, clients and pets |
| Legal Entity | — | Fiscal person (EIN, bank, merchant). Not a login |
| Location | — | Physical site: address, geolocation, time_zone |
| Staff | — | Membership of a User in an Organization. Founder: org-wide Organization administrator |
| User | Authlogic (/login, /register, social, later mobile) | Independent login. Lands on /app. Clinic access through Staff |
| SuperUser | Authlogic (/admin/login) | Entire system. Owns the RBAC catalog. First operator seeded; CRUD at /admin/super_users. Not clinic staff |
Clinic jobs are catalog roles assigned to Staff: Organization administrator, Organization manager, Location administrator, receptionist, veterinarian. See RBAC and Staff access. Founder register assigns Organization administrator.