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.

Marketing + clinic workspace shipped Mobile workflows later

Public routes

PathPage
/Landing (features, pricing, FAQs, trial CTA)
/loginStaff email/password plus Google, Apple, Facebook
/registerCreate account / start trial (provisions tenant)
/appStaff workspace home (signed-in User)
/app/patientsPatient charts, admission, visit/appointment history
/app/scheduleLocation appointment calendar
/app/whiteboardLocation Floor / Pipeline visits board
/app/catalogMaster catalog and Location price/enabled overrides
/app/inventoryPer-Location on-hand stock
/app/billingRedirects to Settings → Billing (SaaS plans, card, upgrades/downgrades, invoices)
/admin/loginSuperUser login
/adminAdmin dashboard (signed-in SuperUser)
/admin/usersStaff accounts table (Impersonate)
/admin/super_usersSuper admins (CRUD)
/admin/organizationsOrganizations directory (trial days; billed plan change when subscribed)
/admin/billing_transactionsSaaS charges past and upcoming
/admin/rolesGlobal RBAC role catalog (CRUD)
/admin/actionsGlobal RBAC action catalog (CRUD)
/admin/auditsAccount field audit log
/admin/settingsPlatform operator settings (default free-trial length)
/privacyPrivacy policy
/termsTerms of service
/facebook/deletionFacebook data deletion callback and status
/locale/:localeSet language cookie (en / es)
/wikiHTML wiki (files in wiki/; linked from footers)
/upHealth check

Marketing landing (/)

Public homepage. English or Spanish from the browser language.

SectionBehavior
HeroHeadline, lead, start-trial to /register, “see how it works” to #features
FeaturesFeature cards from AppFeature landing translations
PricingPlan tiers (Starter, Business, Elite) plus FAQs from YAML
QuoteTestimonial block
Trial CTAPrimary /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.

SurfaceBehavior
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 tabsSelected records; recent sign-ins; Facebook deletions plus recent audits
UsersAll clinic staff accounts. Impersonate opens /app as that User
Super adminsCRUD platform operators. The last SuperUser and the signed-in operator cannot be deleted
OrganizationsDirectory 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 transactionsPast SaaS charges (incl. plan changes) and upcoming renewals
RolesGlobal RBAC role catalog (CRUD; system roles cannot be deleted)
ActionsGlobal permission catalog (CRUD; system actions cannot be deleted)
SettingsSigned-in operator, default free-trial length (new Organizations only), staff social-login providers, languages, link to the audit trail
Audit logName/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.

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.

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 languageUI
Spanish preferred (es, es-AR, …)Spanish
Anything else, or missing headerEnglish

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.

PlanPriceAudienceIncludesCTA
Starter$239Independent vetsPatient records, basic scheduling, email supportStart Starter trial → /register
Business$449Growing clinicsStarter plus SMS reminders, multi-user access, analyticsStart Business trial → /register
Elite$899Multi-location practicesBusiness plus priority support, API, custom brandingContact 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.

FeatureIntentStatus
Smart schedulingCalendar with rooms, staff, recurrenceWeb schedule shipped
Patient recordsCharts, SOAP, history (voice-to-text later)SOAP + history shipped
Analytics dashboardAppointment trends and inventory levelsLater
SMS remindersReminders and messagingLater
Email supportSupport by emailOps
Multi-user accessSeparate logins and RBACShipped
Priority supportFaster response for EliteElite
API accessLabs, billing, other tools (Elite public API)Staff API shipped
Custom brandingClinic branding on client-facing surfacesElite

Actors

User, SuperUser, Organization, LegalEntity, Location, Staff, Client, Patient, Appointment, and Visit persist.

ActorLoginScope
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
UserAuthlogic (/login, /register, social, later mobile)Independent login. Lands on /app. Clinic access through Staff
SuperUserAuthlogic (/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.

Out of scope until defined further Do not implement twice (web and mobile) until docs say how: messaging, onboarding/migration, public API. SOAP on the web is defined in SOAP notes; the mobile chart is still later. Inventory transfers/POs and invoicing remain later.