{
  "name": "Streak",
  "slug": "streak",
  "blocks": ["Pages", "Lists", "Sign-in: users", "Actions: pay"],
  "persona": "teachers",
  "keywords": [
    "habit tracker",
    "practice log",
    "streaks",
    "language practice",
    "learn Spanish",
    "weekly check-in",
    "teacher feedback",
    "adult learners",
    "practice club",
    "member app",
    "goal tracker",
    "daily practice"
  ],
  "description": "An app template for a language teacher's practice club: adult students log a few minutes of Spanish practice each day, keep a streak and a weekly minutes goal, and send a short check-in every Sunday that the teacher reads and answers. A paid monthly Practice club plan. A public page, six member screens under /app and a privacy notice with blanks.",
  "audience": [
    "language teachers with adult students",
    "tutors who run a practice club",
    "music and art teachers of adults"
  ],
  "category": "Tracker & log",
  "job": "member-app",
  "categoryId": "tracker",
  "alsoFits": [
    "habit tracker",
    "goal tracker",
    "practice log",
    "reading log",
    "savings challenge"
  ],
  "direction": "Azulejo tiled wall in blue, tile white and marigold, with a tile painted in for every day you practise",
  "mood": [
    "light",
    "bold",
    "modern"
  ],
  "fonts": [
    "Lilita One",
    "Nunito"
  ],
  "memberApp": {
    "path": "/app",
    "setup": {
      "signup": "open",
      "profile_fields": [
        {
          "name": "name",
          "type": "text",
          "label": "Your name",
          "required": true
        },
        {
          "name": "weekly_goal",
          "type": "choice",
          "label": "Weekly goal in minutes",
          "options": [
            "60",
            "90",
            "150",
            "210"
          ]
        }
      ],
      "display_field": "name"
    },
    "lists": [
      {
        "list": "practice",
        "label": "Practice log",
        "by": "member",
        "fields": [
          {
            "name": "date",
            "type": "date",
            "label": "Day",
            "required": true
          },
          {
            "name": "activity",
            "type": "choice",
            "label": "What you did",
            "required": true,
            "options": [
              "Speaking",
              "Listening",
              "Reading",
              "Writing",
              "Vocabulary",
              "Homework"
            ]
          },
          {
            "name": "minutes",
            "type": "number",
            "label": "Minutes",
            "required": true
          },
          {
            "name": "detail",
            "type": "text",
            "label": "Note"
          }
        ]
      },
      {
        "list": "checkins",
        "label": "Weekly check-ins",
        "by": "member",
        "status_options": [
          "Sent",
          "Read",
          "Answered"
        ],
        "reply": true,
        "fields": [
          {
            "name": "week",
            "type": "date",
            "label": "Week ending",
            "required": true
          },
          {
            "name": "went_well",
            "type": "long_text",
            "label": "What went well",
            "required": true
          },
          {
            "name": "summary",
            "type": "long_text",
            "label": "Your week in numbers (filled in for you)"
          },
          {
            "name": "stuck",
            "type": "long_text",
            "label": "Where you got stuck"
          },
          {
            "name": "question",
            "type": "long_text",
            "label": "A question for Lucía"
          },
          {
            "name": "homework",
            "type": "photo",
            "label": "Photo of your written homework"
          }
        ]
      }
    ],
    "plans": [
      {
        "plan": "club",
        "name": "Practice club",
        "paid": true,
        "price": {
          "amount": 1200,
          "currency": "gbp",
          "interval": "month"
        }
      }
    ],
    "demo": {
      "member": {
        "name": "Priya Shah",
        "email": "priya.shah@example.com",
        "profile": {
          "name": "Priya Shah",
          "weekly_goal": "150"
        }
      },
      "plans": [
        "club"
      ],
      "rows": {
        "practice": [
          {
            "date": "-1d",
            "activity": "Listening",
            "minutes": 20,
            "detail": "Podcast episode 41, the market one",
            "_added": "-1d"
          },
          {
            "date": "-2d",
            "activity": "Vocabulary",
            "minutes": 15,
            "detail": "Kitchen words, 30 cards",
            "_added": "-2d"
          },
          {
            "date": "-3d",
            "activity": "Speaking",
            "minutes": 30,
            "detail": "Conversation exchange with Marta, no English",
            "_added": "-3d"
          },
          {
            "date": "-4d",
            "activity": "Homework",
            "minutes": 25,
            "detail": "Preterite vs imperfect sheet",
            "_added": "-4d"
          },
          {
            "date": "-5d",
            "activity": "Reading",
            "minutes": 20,
            "detail": "Two pages of the graded reader",
            "_added": "-5d"
          },
          {
            "date": "-6d",
            "activity": "Vocabulary",
            "minutes": 10,
            "_added": "-6d"
          },
          {
            "date": "-7d",
            "activity": "Writing",
            "minutes": 25,
            "detail": "Diary entry about the weekend",
            "_added": "-7d"
          },
          {
            "date": "-8d",
            "activity": "Listening",
            "minutes": 15,
            "_added": "-8d"
          },
          {
            "date": "-9d",
            "activity": "Speaking",
            "minutes": 20,
            "detail": "Ordered lunch in Spanish",
            "_added": "-9d"
          },
          {
            "date": "-10d",
            "activity": "Vocabulary",
            "minutes": 10,
            "_added": "-10d"
          },
          {
            "date": "-11d",
            "activity": "Reading",
            "minutes": 30,
            "_added": "-11d"
          },
          {
            "date": "-12d",
            "activity": "Homework",
            "minutes": 25,
            "_added": "-12d",
            "detail": "Por/para sheet"
          }
        ],
        "checkins": [
          {
            "week": "-1w:sun",
            "went_well": "Ordered lunch in Spanish and understood the waiter's reply.",
            "stuck": "Listening when people speak fast.",
            "question": "Any podcast for intermediate learners?",
            "_added": "-1w:sun",
            "_status": "Answered",
            "_reply": "¡Bien hecho! Try 'Hoy hablamos' at 0.8 speed for a week, then full speed on Sunday."
          },
          {
            "week": "-2w:sun",
            "went_well": "Started the club: two chapters of the graded reader and the homework sheet.",
            "question": "Is it 'pienso en ti' or 'pienso de ti'?",
            "homework": "art/homework.svg",
            "_added": "-2w:sun",
            "_status": "Answered",
            "_reply": "¡Muy bien, Priya! 'Pienso en ti' (thinking about someone). Your por/para sheet: five of six right; number 5 needs para (working for a company)."
          }
        ]
      }
    }
  },
  "files": [
    "index.html",
    "privacy.html",
    "app/index.html",
    "app/log.html",
    "app/checkin.html",
    "app/history.html",
    "app/plan.html",
    "app/account.html",
    "styles.css",
    "app.js",
    "kit.css",
    "kit.js",
    "kit-icons.svg",
    "site.webmanifest",
    "favicon.svg",
    "og.png",
    "apple-touch-icon.png",
    "icon-192.png",
    "icon-512.png",
    "icon-512-maskable.png",
    "art/desk.svg",
    "art/homework.svg",
    "art/act-speaking.svg",
    "art/act-listening.svg",
    "art/act-reading.svg",
    "art/act-writing.svg",
    "art/act-vocabulary.svg",
    "art/act-homework.svg",
    "art/tile-a.svg",
    "art/tile-b.svg",
    "art/flower.svg",
    "art/parrot.svg",
    "art/lucia.svg"
  ],
  "pages": [
    {
      "path": "index.html",
      "label": "Home",
      "purpose": "The public page: Lucía Ferrer's Spanish practice club for adults, how the app works (log, streak, Sunday check-in answered by Lucía), the price and how to join"
    },
    {
      "path": "app/index.html",
      "label": "Today",
      "purpose": "Signed out: the welcome screen and sign-in. Signed in: the streak, this week's days and minutes against your goal, Log today, Lucía's latest answer and quick actions"
    },
    {
      "path": "app/log.html",
      "label": "Log",
      "purpose": "Log today's practice (day, what you did, minutes, a note) with quick picks, and today's and yesterday's entries"
    },
    {
      "path": "app/checkin.html",
      "label": "Check-in",
      "purpose": "Send this week's check-in (what went well, where you got stuck, a question, a photo of your homework) and see each week's status (Sent, Read, Answered) with Lucía's answer"
    },
    {
      "path": "app/history.html",
      "label": "History",
      "purpose": "Every practice entry newest first with Log again, minutes by month and by activity"
    },
    {
      "path": "app/plan.html",
      "label": "Plan",
      "purpose": "The Practice club plan, what it includes, its price, and renewing or cancelling"
    },
    {
      "path": "app/account.html",
      "label": "Account",
      "purpose": "Your name and weekly goal, email, devices, billing, renewal and leaving (Page Lemon's account block)"
    },
    {
      "path": "privacy.html",
      "label": "Privacy",
      "purpose": "The privacy notice, with blanks the Site Owner fills in"
    }
  ],
  "facts": [
    "teacher or school name",
    "teacher's name",
    "contact email",
    "the language and the practice activities",
    "plan price",
    "check-in day",
    "privacy contact, address and retention"
  ],
  "interview": [
    "What do you teach, and what is your practice club called?",
    "Who are your students, and how do they join?",
    "Which practice activities should students log? Up to about eight.",
    "What does the club cost a month, and what does it include?",
    "Which day do students send their weekly check-in, and how soon do you answer?",
    "Which email address should students write to?",
    "For the privacy notice: your address, who may see students' logs, and how long you keep them?"
  ],
  "customise": {
    "strings": [
      "Calle Uno Spanish, Lucía Ferrer, the email and town in the header, footer, titles and copy: replace every data-pl-fill fact with the owner's own. Replace the name in site.webmanifest too.",
      "Fill in every highlighted blank on privacy.html before students join (not legal advice: https://pagelemon.com/agents/member-app-legal).",
      "Make the practice and checkins lists (checkins with status_options and reply) exactly as memberApp.lists says. Change the activities on app/log.html, app.js (the picture for each) and the list's options together.",
      "Set the Practice club plan with save_plan at the owner's price and change the price on index.html and app/plan.html together. Call setup_app with signup \"open\" and the two profile fields.",
      "The teacher answers each check-in in the Dashboard (Apps, Entries): Read, then Answered with a reply the student reads on app/checkin.html.",
      "A practice log only: never add health, mood, sleep, weight, payment card, bank or ID fields, and never collect anything about under-18s."
    ],
    "colours": "Edit the colour tokens in the art direction :root block at the end of styles.css (azulejo blue, tile white and marigold); light and dark follow the device.",
    "fonts": "Lilita One and Nunito, loaded from Google Fonts on every page; your AI can self-host them on request.",
    "sections": "Public: index.html. Member pages under /app use the shared app kit (kit.css, kit.js, kit-icons.svg: never edit them) and app.js (the week strip, the weekly goal bar and activity pictures).",
    "images": "art/desk.svg is the teacher picture on the public page and the welcome picture in the app (1200×1260); art/homework.svg is the sample homework photo; art/tile-a.svg, art/tile-b.svg, art/flower.svg and art/parrot.svg are drawn pattern and character art to keep; art/lucia.svg is a drawn portrait to replace with the teacher's own photo. Replace the desk with your own photo, never a stranger's face."
  },
  "schemaVersion": 2,
  "updated": "2026-10-22"
}
