{
  "name": "Walkies",
  "slug": "walkies",
  "blocks": ["Pages", "Lists", "Sign-in: users", "Actions: pay, book"],
  "persona": "local-services",
  "keywords": [
    "dog walker",
    "dog walking",
    "pet sitter",
    "pet sitting",
    "book walks",
    "photo updates",
    "client portal",
    "dog walking app",
    "cat sitting",
    "meet and greet",
    "dog walking website",
    "dog walking booking"
  ],
  "description": "An app template for a dog walker: clients keep a profile for each dog, book group or solo walks by the day and slot, follow each booking from Requested to Walked with the walker's reply, and read a report after every walk with the route, time, distance and an album link. Pay as you go or a weekly plan. A public page with the free meet and greet, six member screens under /app and a privacy notice with blanks.",
  "audience": [
    "dog walkers and pet sitters",
    "cat sitters and pet visit services",
    "small local services that send photo updates"
  ],
  "category": "Dog walking and pet sitting",
  "job": "member-app",
  "categoryId": "client-portal",
  "alsoFits": [
    "pet sitting",
    "cat sitting",
    "pet visits",
    "dog boarding updates",
    "weekend sitting"
  ],
  "direction": "Sky over field green: walks as a drawn park map with a tennis-ball route, dogs in collar tags",
  "mood": [
    "light",
    "bold",
    "modern"
  ],
  "fonts": [
    "Bagel Fat One",
    "Nunito Sans"
  ],
  "memberApp": {
    "path": "/app",
    "setup": {
      "signup": "invite",
      "profile_fields": [
        {
          "name": "name",
          "type": "text",
          "label": "Your name",
          "required": true
        },
        {
          "name": "street",
          "type": "text",
          "label": "Street, for pick-ups"
        },
        {
          "name": "phone",
          "type": "phone",
          "label": "Phone on walk days"
        }
      ],
      "display_field": "name"
    },
    "lists": [
      {
        "list": "dogs",
        "label": "Dogs",
        "by": "member",
        "fields": [
          {
            "name": "name",
            "type": "text",
            "label": "Dog's name",
            "required": true
          },
          {
            "name": "breed",
            "type": "text",
            "label": "Breed"
          },
          {
            "name": "age",
            "type": "number",
            "label": "Age in years"
          },
          {
            "name": "walk_style",
            "type": "choice",
            "label": "Walks best",
            "required": true,
            "options": [
              "In a small group",
              "On their own"
            ]
          },
          {
            "name": "keys",
            "type": "choice",
            "label": "How Bea gets in",
            "required": true,
            "options": [
              "Key safe",
              "Spare key with Bea",
              "Someone home"
            ]
          },
          {
            "name": "vet_practice",
            "type": "text",
            "label": "Vet practice"
          },
          {
            "name": "likes",
            "type": "long_text",
            "label": "Anything Bea should know on walks"
          },
          {
            "name": "photo",
            "type": "photo",
            "label": "Photo of your dog"
          }
        ]
      },
      {
        "list": "bookings",
        "label": "Walk bookings",
        "by": "member",
        "status_options": [
          "Requested",
          "Confirmed",
          "Walked",
          "Can't do that slot",
          "Cancelled"
        ],
        "reply": true,
        "fields": [
          {
            "name": "dog",
            "type": "text",
            "label": "Which dog",
            "required": true
          },
          {
            "name": "walk",
            "type": "choice",
            "label": "Walk",
            "required": true,
            "options": [
              "Group walk, 1 hour (£14)",
              "Solo walk, 1 hour (£18)",
              "Puppy visit, 30 min (£12)"
            ]
          },
          {
            "name": "date",
            "type": "date",
            "label": "Date",
            "required": true
          },
          {
            "name": "slot",
            "type": "choice",
            "label": "Pick-up window",
            "required": true,
            "options": [
              "Morning, 9 to 11",
              "Midday, 11 to 1",
              "Afternoon, 1 to 3"
            ]
          },
          {
            "name": "notes",
            "type": "long_text",
            "label": "Anything for Bea"
          }
        ]
      },
      {
        "list": "cancellations",
        "label": "Walk cancellations",
        "by": "member",
        "status_options": [
          "Received",
          "Cancelled"
        ],
        "fields": [
          {
            "name": "walk",
            "type": "text",
            "label": "Which walk",
            "required": true
          },
          {
            "name": "why",
            "type": "text",
            "label": "Anything Bea should know"
          }
        ]
      },
      {
        "list": "reports",
        "label": "Walk reports",
        "by": "owner",
        "fields": [
          {
            "name": "date",
            "type": "date",
            "label": "Date",
            "required": true
          },
          {
            "name": "dog",
            "type": "text",
            "label": "Dog",
            "required": true
          },
          {
            "name": "walk",
            "type": "choice",
            "label": "Walk",
            "required": true,
            "options": [
              "Group walk",
              "Solo walk",
              "Puppy visit"
            ]
          },
          {
            "name": "route",
            "type": "text",
            "label": "Route"
          },
          {
            "name": "minutes",
            "type": "number",
            "label": "Minutes"
          },
          {
            "name": "km",
            "type": "number",
            "label": "Distance in km"
          },
          {
            "name": "how_it_went",
            "type": "long_text",
            "label": "How it went"
          },
          {
            "name": "photos_link",
            "type": "text",
            "label": "Photo album link (https)"
          }
        ]
      }
    ],
    "demo": {
      "member": {
        "name": "Ruth Whittaker",
        "email": "ruth.whittaker@example.com",
        "profile": {
          "name": "Ruth Whittaker",
          "street": "14 Lane End, Ellerby Green",
          "phone": "07700 900 214"
        }
      },
      "plans": [],
      "rows": {
        "dogs": [
          {
            "name": "Juno",
            "breed": "Cockapoo",
            "age": 3,
            "walk_style": "In a small group",
            "keys": "Key safe",
            "vet_practice": "Coldharbour Vets",
            "likes": "Friendly but pulls towards other dogs. Treats in the left coat pocket work every time.",
            "photo": "art/juno.webp",
            "_added": "-20w:mon"
          },
          {
            "name": "Biscuit",
            "breed": "Border terrier",
            "age": 6,
            "walk_style": "On their own",
            "keys": "Key safe",
            "vet_practice": "Coldharbour Vets",
            "likes": "Loves the puddle by the stile. Nervous of bicycles: keep to the verge side of the lane.",
            "photo": "art/biscuit.webp",
            "_added": "-20w:mon"
          }
        ],
        "bookings": [
          {
            "dog": "Juno and Biscuit",
            "walk": "Group walk, 1 hour (£14)",
            "date": "+1w:mon",
            "slot": "Morning, 9 to 11",
            "notes": "Back by 11 please, the gardener comes at half past.",
            "_added": "today",
            "_status": "Requested"
          },
          {
            "dog": "Juno and Biscuit",
            "walk": "Group walk, 1 hour (£14)",
            "date": "+1d",
            "slot": "Morning, 9 to 11",
            "notes": "Both dogs, please.",
            "_added": "-2d",
            "_status": "Confirmed",
            "_reply": "See you at the gate at nine. I'll bring a towel: the green is muddy this week. Bea"
          },
          {
            "dog": "Biscuit",
            "walk": "Solo walk, 1 hour (£18)",
            "date": "-1d",
            "slot": "Midday, 11 to 1",
            "notes": "Solo please, he had a scrap with a spaniel last week.",
            "_added": "-4d",
            "_status": "Walked",
            "_reply": "Walked solo round the mill pond. Report is up."
          },
          {
            "dog": "Juno",
            "walk": "Group walk, 1 hour (£14)",
            "date": "-3d",
            "slot": "Midday, 11 to 1",
            "notes": "",
            "_added": "-6d",
            "_status": "Walked",
            "_reply": "Walked at midday with the group. Report is up."
          },
          {
            "dog": "Biscuit",
            "walk": "Solo walk, 1 hour (£18)",
            "date": "+1w:wed",
            "slot": "Afternoon, 1 to 3",
            "notes": "",
            "_added": "-1d",
            "_status": "Can't do that slot",
            "_reply": "Afternoons are full that week. Could he do a morning solo walk instead? Book 9 to 11 and I'll confirm it. Bea"
          },
          {
            "dog": "Juno and Biscuit",
            "walk": "Group walk, 1 hour (£14)",
            "date": "-1w:wed",
            "slot": "Morning, 9 to 11",
            "notes": "Both dogs, please.",
            "_added": "-2w:fri",
            "_status": "Walked",
            "_reply": "Wet one: we kept to the woods. Report is up."
          }
        ],
        "reports": [
          {
            "date": "-1d",
            "dog": "Biscuit",
            "walk": "Solo walk",
            "route": "Mill pond loop and back along Lane End",
            "minutes": 58,
            "km": 3.9,
            "how_it_went": "Calm on the lead, a long sniff at the stile and straight into the puddle, as promised. Passed two bikes on the verge side with no fuss. Dried off before the key safe.",
            "photos_link": "https://photos.muddypaws.example.com/biscuit-mill-pond",
            "_added": "-1d"
          },
          {
            "date": "-3d",
            "dog": "Juno",
            "walk": "Group walk",
            "route": "Coldharbour Rise and the allotment path",
            "minutes": 62,
            "km": 4.4,
            "how_it_went": "Group of four. Pulled a little at the allotment gate, fine once we kept moving. Good recall on the long line in the top field.",
            "photos_link": "https://photos.muddypaws.example.com/juno-rise",
            "_added": "-3d"
          },
          {
            "date": "-1w:wed",
            "dog": "Juno and Biscuit",
            "walk": "Group walk",
            "route": "Ellerby Green loop",
            "minutes": 60,
            "km": 4.1,
            "how_it_went": "Wet and windy, so we kept to the woodland path. Both came home tired and towelled.",
            "photos_link": "https://photos.muddypaws.example.com/green-loop",
            "_added": "-1w:wed"
          }
        ]
      }
    },
    "plans": [
      {
        "plan": "payg",
        "name": "Pay as you go",
        "free": true
      },
      {
        "plan": "regular",
        "name": "Weekday regular",
        "paid": true,
        "price": {
          "amount": 6500,
          "currency": "gbp",
          "interval": "week"
        }
      }
    ]
  },
  "slots": [
    {
      "id": "meet",
      "kind": "booking",
      "page": "index.html",
      "fallback": "tel"
    }
  ],
  "pages": [
    {
      "path": "index.html",
      "label": "Home",
      "purpose": "The public page: services and prices, where Bea walks, how it works, the walker and the free meet and greet booking"
    },
    {
      "path": "app/index.html",
      "label": "Home (app)",
      "purpose": "Signed out: the welcome with the park map and sign-in. Signed in: the latest walk as a park map with your dogs' collar tags and the walk readout (minutes, km, route, how it went, photos), the next walk with its four-stop status and Bea's reply, the plan and the booking rules"
    },
    {
      "path": "app/book.html",
      "label": "Book a walk",
      "purpose": "Pick the dog, the walk (group, solo or puppy visit, with prices), the date and pick-up window and a note; the booking rules beside it"
    },
    {
      "path": "app/walks.html",
      "label": "Walks",
      "purpose": "Upcoming bookings with their status (Requested, Confirmed, Walked, Can't do that slot) and Bea's reply, Book another slot, Ask Bea to cancel (a cancellation Bea marks Cancelled), then past walks with Book again"
    },
    {
      "path": "app/reports.html",
      "label": "Reports",
      "purpose": "A report after every walk as a small park map with its own route: dog, route, minutes, distance, how it went and the photo album link, under the month's totals"
    },
    {
      "path": "app/dogs.html",
      "label": "Dogs",
      "purpose": "Each dog's profile with its photo, how Bea gets in, vet and walk notes, and the form to add a dog"
    },
    {
      "path": "app/plan.html",
      "label": "Plan",
      "purpose": "Pay as you go or the Weekday regular plan, what each covers and how renewal and cancelling work"
    },
    {
      "path": "app/account.html",
      "label": "Account",
      "purpose": "The account block (email, profile, plan, billing, devices, leaving)"
    },
    {
      "path": "privacy.html",
      "label": "Privacy",
      "purpose": "The privacy notice for clients, with blanks the owner fills in"
    }
  ],
  "files": [
    "index.html",
    "privacy.html",
    "app/index.html",
    "app/book.html",
    "app/walks.html",
    "app/reports.html",
    "app/dogs.html",
    "app/plan.html",
    "app/account.html",
    "styles.css",
    "app.js",
    "kit.css",
    "kit.js",
    "kit-icons.svg",
    "art/juno.webp",
    "art/biscuit.webp",
    "art/woodland-walk.webp",
    "art/ellerby-green.webp",
    "art/chip-seam.svg",
    "art/stop-paw.svg",
    "art/stop-ball.svg",
    "art/park.svg",
    "site.webmanifest",
    "favicon.svg",
    "og.png",
    "apple-touch-icon.png",
    "icon-192.png",
    "icon-512.png",
    "icon-512-maskable.png"
  ],
  "facts": [
    "business name",
    "walker's name and credentials",
    "phone and email",
    "postcode and areas covered",
    "services and prices",
    "walk time slots and opening hours",
    "meet and greet booking"
  ],
  "interview": [
    "What is the business called, and who walks the dogs?",
    "Which areas and postcode do you cover, and what are your walk and sitting prices?",
    "Which time slots do you offer, and how many dogs can join a group walk?",
    "How do you hold keys for clients, and which vet practice details do you ask for?",
    "Which email address and phone number should clients use, and what do your insurance and checks cover?"
  ],
  "customise": {
    "strings": [
      "Muddy Paws Walking Co. and Bea Langridge-Osei in the header, footer, titles and walker section; replace every data-pl-fill fact with the owner's own, and the services and prices on index.html, the walk options (with prices) in memberApp.lists bookings and app/book.html",
      "Fill in every highlighted blank on privacy.html with the Site Owner before clients use the site (not legal advice: https://pagelemon.com/agents/member-app-legal)",
      "Pick-up windows (9 to 11, 11 to 1, 1 to 3), the booking cut-off (6pm the day before) and the cancellation rule (free until 8pm the evening before) are on app/book.html, app/walks.html and index.html; change them together.",
      "The Weekday regular plan (£65 a week) covers five group walks Monday to Friday: the client books them in the app as usual and Bea doesn't charge them; solo walks and puppy visits are extra. It's a paid plan: save_plan, then Stripe. Pay as you go is the free plan; Bea invoices those walks herself.",
      "Never ask for health details about the client; keep dog notes to walking (pulling, recall, other dogs). Never collect card, bank or ID numbers."
    ],
    "colours": "Sky and field: edit the --wk-* tokens at the top of styles.css (Sky, Field Green, Deep Field, Tennis Ball, Mud, Chalk, and the --wk-m-* park map colours), light and dark (a dusk park); the --k-* tokens below them follow. favicon.svg uses Field Green and Tennis Ball.",
    "fonts": "Google Fonts: Bagel Fat One (headlines, dogs' names and every number) and Nunito Sans (text), one <link> in every page head and --wk-display / --wk-text in styles.css. If the owner prefers no font service, download both (OFL) into a fonts/ folder and switch to @font-face.",
    "sections": "setup_app with signup \"invite\" (Bea invites each client after the meet and greet) and the profile fields in memberApp.setup, save_plan for payg (free) and regular (paid), then save_app_list for dogs, bookings (status_options and reply on), cancellations (status_options) and reports (rows Bea assigns to the client). The owner's path: a booking arrives in the Dashboard (Apps, Entries); Bea sets Confirmed or Can't do that slot with a reply, and Walked after the walk; a cancellation arrives the same way and she marks it Cancelled and sets the booking to Cancelled; then she adds a reports row assigned to the client (route, minutes, km, how it went, album link). The client sees each change on Home and Walks, gets an email, and reads the report under Reports. app.js fills Book again links and the dog picker.",
    "images": "art/juno.webp, art/biscuit.webp, art/woodland-walk.webp and art/ellerby-green.webp are Unsplash photos (PHOTOS.md); dogs are round-cropped into collar tags by styles.css. Clients upload their own dog photos in the app; replace the walk photos with your own (no faces). art/park.svg holds the drawn park map parts (trees, pond, paths, gate, paw) that every map on the public page, Home and Reports uses; the route and paw stops are drawn in each page. art/stop-ball.svg, stop-paw.svg and chip-seam.svg are the tennis-ball and paw marks of the status stops, empty states and day pills. favicon.svg is the paw and ball mark; the PNG icons and manifest are made from it."
  },
  "schemaVersion": 2,
  "updated": "2026-10-22"
}
