{
  "version": 1,
  "total": 3,
  "paths": [
    {
      "id": "search-your-notes",
      "title": "Build a search engine for your notes",
      "category": "AI & Python",
      "level": "Some Python",
      "minutes": 150,
      "color": "violet",
      "symbol": "⌘",
      "description": "Turn a folder of ideas into something you can actually find. Learn how meaning becomes a vector, then put it to work.",
      "outcome": "A local semantic search prototype, tested with five questions of your own.",
      "prerequisites": "Python functions, lists, and a computer where you can install Python packages.",
      "cost": "Free reading and open-source tools. Model downloads require internet and disk space; no paid API is required.",
      "tags": [
        "ai",
        "python",
        "embeddings",
        "semantic search",
        "notes"
      ],
      "steps": [
        {
          "id": "prepare",
          "title": "Give your notes a structure",
          "minutes": 30,
          "concept": "Search needs a collection to search over. A list of small, meaningful passages is a useful starting point; keep a title or identifier so every result leads back to its source.",
          "resource": "Python: data structures",
          "url": "https://docs.python.org/3/tutorial/datastructures.html",
          "why": "Lists and dictionaries are enough to represent your first searchable collection.",
          "task": "Create a list of ten short notes. Give each note a unique ID, a title, and its text. Use invented or non-sensitive notes for this exercise.",
          "check": "Can you retrieve a note by its ID without confusing it with another note?",
          "hint": "Start with two dictionaries in a list. Print each title and text before adding the other eight notes."
        },
        {
          "id": "embed",
          "title": "Find meaning beyond matching words",
          "minutes": 60,
          "concept": "An embedding represents text as numbers. Similarity compares those representations. Similar wording and similar meaning overlap, but they are not the same thing—and a high score is not proof that an answer is correct.",
          "resource": "Sentence Transformers: quickstart",
          "url": "https://www.sbert.net/docs/quickstart.html",
          "why": "The official examples connect text, embeddings, and similarity in one small workflow.",
          "task": "Follow the Sentence Transformer text example, then substitute your notes. Encode a question and sort the notes by similarity. Record the top three results.",
          "check": "Does a paraphrased question find the right note even when it uses different words?",
          "hint": "First reproduce the three-sentence example. Inspect the embedding shape and similarity scores before changing the inputs."
        },
        {
          "id": "evaluate",
          "title": "Try to break your search",
          "minutes": 60,
          "concept": "A useful search tool needs evidence about when it works. A tiny evaluation set makes failures visible and gives you a baseline for future changes.",
          "resource": "Sentence Transformers: similarity examples",
          "url": "https://www.sbert.net/docs/quickstart.html",
          "why": "Use the documented scoring workflow as the baseline for your own experiments.",
          "task": "Write five questions and the expected note IDs before running search. Include one question your notes cannot answer. Record the actual results, three successes or failures, and one improvement you would try.",
          "check": "Can you explain one failure without claiming the similarity score measures factual truth?",
          "hint": "Use a table with question, expected ID, top result, and your judgment. Keep the unanswered question even if its highest score looks convincing."
        }
      ],
      "canonical_url": "https://dotaiz.com/paths/search-your-notes/",
      "completion_basis": "self_reported",
      "time_basis": "editorial_estimate"
    },
    {
      "id": "first-web-page",
      "title": "Make your first corner of the web",
      "category": "Web development",
      "level": "Beginner",
      "minutes": 120,
      "color": "peach",
      "symbol": "↗",
      "description": "Build a small, thoughtful website about something you love. Make it readable, responsive, and usable with a keyboard.",
      "outcome": "A personal web page that works on a phone and can be navigated without a mouse.",
      "prerequisites": "A computer, a browser, and a text editor. No coding experience needed.",
      "cost": "Free. Publishing to a hosting service is optional and outside this path.",
      "tags": [
        "html",
        "css",
        "website",
        "design",
        "beginner",
        "accessibility"
      ],
      "steps": [
        {
          "id": "structure",
          "title": "Tell a story with HTML",
          "minutes": 30,
          "concept": "HTML gives content meaning: headings describe sections, paragraphs develop ideas, and links connect pages. Start with that structure before choosing colors.",
          "resource": "MDN: structuring content",
          "url": "https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Structuring_content",
          "why": "An introduction to semantic HTML from the maintainers of a widely used web reference.",
          "task": "Create an index.html about a hobby. Add one main heading, two sections, a list of three recommendations, and a link to a useful source.",
          "check": "Does the page still make sense before any styles are applied?",
          "hint": "Begin with h1, h2, p, ul, li, and a elements. Open the file in your browser after every small change."
        },
        {
          "id": "style",
          "title": "Give it a visual identity",
          "minutes": 45,
          "concept": "Good visual hierarchy makes a page easier to read. Type size, spacing, and contrast can do more than decoration. A flexible width helps the same content fit different screens.",
          "resource": "MDN: CSS styling basics",
          "url": "https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics",
          "why": "Learn selectors, spacing, and typography while styling a page you already understand.",
          "task": "Add a stylesheet. Choose one accent color, set a readable line height, and limit the content width. Resize the browser to a narrow phone-sized window and fix any horizontal overflow.",
          "check": "Can you read the narrow layout without zooming or scrolling sideways?",
          "hint": "Try max-width with a flexible width, generous padding, and border-box sizing. Avoid fixed widths on paragraphs."
        },
        {
          "id": "test",
          "title": "Make it work for someone else",
          "minutes": 45,
          "concept": "A page is useful when people can operate it. Meaningful link text, a logical heading order, and visible keyboard focus help visitors understand where they are and what they can do.",
          "resource": "MDN: structuring content",
          "url": "https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Structuring_content",
          "why": "Revisit the meaning of your elements while checking the finished page.",
          "task": "Navigate every link with Tab and Enter. Check the page at 200% zoom. Describe or fix three problems you found, then write a short explanation of your design decisions.",
          "check": "Can another person tell what the page is for and follow its links using only a keyboard?",
          "hint": "Do not remove the browser focus outline. Replace vague link labels such as 'click here' with a description of the destination."
        }
      ],
      "canonical_url": "https://dotaiz.com/paths/first-web-page/",
      "completion_basis": "self_reported",
      "time_basis": "editorial_estimate"
    },
    {
      "id": "data-with-a-story",
      "title": "Find the story in a small dataset",
      "category": "Data & reasoning",
      "level": "Some Python",
      "minutes": 135,
      "color": "mint",
      "symbol": "▥",
      "description": "Ask a question, inspect the evidence, and explain what the numbers can—and cannot—tell you.",
      "outcome": "A reproducible notebook with a data comparison, a conclusion, and its limitations.",
      "prerequisites": "Basic Python and a local Python environment with pandas installed.",
      "cost": "Free reading and open-source tools; no paid dataset is required.",
      "tags": [
        "data",
        "pandas",
        "python",
        "analysis",
        "statistics",
        "research"
      ],
      "steps": [
        {
          "id": "question",
          "title": "Start with an answerable question",
          "minutes": 30,
          "concept": "A good analysis starts with a clear comparison. Decide what one row represents, what you will measure, and which missing values might change your answer.",
          "resource": "pandas: selecting data",
          "url": "https://pandas.pydata.org/docs/getting_started/intro_tutorials/03_subset_data.html",
          "why": "Learn how to inspect columns and choose rows before drawing conclusions.",
          "task": "Create a small table of invented daily study sessions: date, subject, and minutes. Include at least ten rows and one missing value. Write a question about the data before calculating anything.",
          "check": "Can you say exactly what one row and each column represent?",
          "hint": "Try 'Which subject received more recorded study time?' Avoid claims about learning quality when you only measure minutes."
        },
        {
          "id": "compare",
          "title": "Make a comparison you can explain",
          "minutes": 60,
          "concept": "Filtering changes which observations contribute to a result. State the rule and show how much data remains so someone else can reproduce your comparison.",
          "resource": "pandas: selecting data",
          "url": "https://pandas.pydata.org/docs/getting_started/intro_tutorials/03_subset_data.html",
          "why": "Boolean filters and column selection support a transparent, reproducible comparison.",
          "task": "Select two subjects and compare their recorded minutes. State how you handled the missing value. Include the number of sessions for each subject alongside the totals.",
          "check": "Could someone reproduce your numbers from the original table and your filtering rule?",
          "hint": "Filter one subject at a time, inspect the selected rows, and only then calculate the total. A missing value is not automatically zero."
        },
        {
          "id": "explain",
          "title": "Write a conclusion with boundaries",
          "minutes": 45,
          "concept": "A result describes the data you have. It does not automatically explain a cause or generalize to everyone. Limitations are part of a useful answer.",
          "resource": "Python: data structures",
          "url": "https://docs.python.org/3/tutorial/datastructures.html",
          "why": "Keep the original records available so the analysis can be checked against them.",
          "task": "Write a three-sentence finding: the comparison, the supporting numbers, and one limitation. Change one input record, rerun the analysis, and explain whether your conclusion changes.",
          "check": "Have you avoided claiming that more study minutes caused better learning?",
          "hint": "Use 'In these invented sessions…' to scope your conclusion. Mention the sample size and the missing observation."
        }
      ],
      "canonical_url": "https://dotaiz.com/paths/data-with-a-story/",
      "completion_basis": "self_reported",
      "time_basis": "editorial_estimate"
    }
  ]
}