UpPetto

Start from what you already know.

Every course starts by explaining what a variable is. Tell UpPetto what you already do and it writes the other one: the comparisons with what you know, the habits that will trip you, and nothing you've said you already understand. Every risky claim is checked against sources, and the page shows you what got cut.

I already know . I need to be able to by .

Two minutes of questions. $5 per course, no subscription.

Your text is processed by external AI services (OpenRouter (Anthropic, DeepSeek, Google, OpenAI, Thinking Machines, Xiaomi, Z.ai, xAI) · Perplexity). Don't paste personal data, employer or client documents, or anything under NDA — a general description of the task is enough. If something breaks, message whoever invited you to the pilot.

Or start from a request someone actually made:

The same topic, two courses.

Python is Python. What changes is the reader. Left: where a course written for nobody in particular begins. Right: where the one from the request above begins.

A Python course for everyone

  1. Installing Python and your first program
  2. Variables and data types
  3. Conditions and loops
  4. Functions and arguments
  5. Lists and dictionaries

The course for someone who writes C

  1. Names bind to objects: why = is not memcpy
  2. Passing arguments without “by value” and “by pointer”
  3. is vs ==, interning and small ints
  4. Dynamic typing: which errors the C compiler caught and Python won't
  5. Duck typing and protocols instead of interfaces

The left column is a fair sketch of a beginner course, not a specific product. The right column is the real table of contents of the course you can read below.

Your words go straight to the writer.

“Explain through the differences from C and through the mistakes a C programmer makes by inertia.”

Names bind to objects: why = is not memcpy

for … in and slices instead of for (i = 0; i < n; i++)

EAFP instead of LBYL: why Python prefers “do it and handle the error”

“Don't explain what a variable, a loop or a function is. I know that.”

Not one lesson on syntax. The course opens with the object model.

Deliberately left out, each with a reason: asyncio, metaclasses and descriptors, C extensions, numpy and pandas, profiling and Cython.

“I already program in C, so explain through code and data structures, not ‘click these buttons’.”

Geometry as an array of structs: points, primitives, vertices, detail

Attribute Wrangle: your parallel for-each over geometry

Read a real lesson, then see what the check changed.

The opening of lesson 1 of that Python course. Flip the switch and the sentences a draft got wrong appear struck through, next to what was published and why.

What happened to this one lesson

Claims kept
5
Softened for missing support
2
Removed outright
2

Module 1: Object model and reference semantics

Names bind to objects: why = is not memcpy

After this lesson you can predict, without running the code, whether an object changes through a second name bound to the same list or dict.

In C a variable is a named region of memory with a fixed size and type, allocated by the compiler on the stack or explicitly on the heap. int x = 5; means: reserve 4 (or 8) bytesreserve a few bytes, put the bit pattern of 5 there, and every later x = … is a memcpy-like write of new bytes into the same cell. int y = x; allocates a new cell and copies the contents of x into it: from then on x and y are two independent stores.

In Python a name is not a memory cell. A name is a binding, an entry in a namespace that refers to an object living on the interpreter's heap. x = 5 does not reserve a cell called x; it creates (or finds) the object 5 and points the name at it. The next x = "hello" doesn't overwrite x with another type; it moves the binding to a different object. The name never had a size or a type. The object has the type.

id() returns the object's address in memoryThe id() function returns an identifier for an object (in CPython it is related to the object's address in memory) and lets you check whether two names refer to the same object.

What you know from CIn PythonWhat changes
int y = x; copies bytes into a new cell b = a binds a second name to the same object Nothing is copied. Two names, one object.
Assignment writes into the variable Assignment re-points the name The name has no type or size. The object does.
A struct copy is independent A list reached through two names is one list A mutation through b is visible through a.

The lesson's first figure, redrawn as a table for this excerpt.

a = [1, 2, 3]
b = a          # b and a are two names for the same list
b.append(4)
print(a)       # [1, 2, 3, 4]

C reasoning says: “b = a is a struct copy, so a is untouched.” That is wrong. [1, 2, 3] is an object on the heap; a and b are two names bound to it. append mutates the object in place, so the change is visible through both names.

Take away

= in Python binds a name to an object; it does not copy bytes. Several names for one object is the normal state of a program, not a side effect. Whether the other names “see” a change comes down to two questions: is the object mutable, and does the operation mutate it in place or create a new one?

This lesson's check

  • 5 claims kept. Each was found in the knowledge base built for this course.
  • 2 softened. The sources were silent, so the sentence lost its false precision. Never certified.
  • 2 removals. Unreproducible values in a figure, and two duplicate diagrams.
  • Second opinion. A different model re-checked and could not corroborate two of the claims from the sources. It can only lower trust, never raise it, and the lesson says so.

Checked is not proven. Two models agreeing makes a claim better supported, not true. Where a check doesn't finish, the lesson is labelled amber. It is never painted green.

Deliberately left out of this course

  • asyncio and async/await. A separate model of thinking; not needed for a first move to idiomatic synchronous Python.
  • Deep OOP: metaclasses, multiple inheritance, descriptors. A C programmer doesn't write classes by C inertia; the risk lives in the object model and exceptions.
  • C extensions, ctypes, embedding CPython. Useful for optimisation, but the step after idiomatic Python, not part of the move.
  • Domain libraries: numpy, pandas, web frameworks. Not the language itself; built on top of the idioms this course teaches.
  • Profiling, Cython, PyPy. Needs confident idiomatic code first; in two weeks it is excess depth.

Read all 22 lessons, no sign-up

How a course gets written.

Everything that matters is done twice, by two different models, and a third one judges. No person reads your course, and the page never claims more than the machines did.

  1. 1

    Say what you know and what you need.

    Two minutes, in your own words or with buttons. Paste a job description or a syllabus if you have one. Write in any language and the course follows it.

  2. 2

    Sources first.

    Two search models on two different indexes collect sources into a knowledge base for your topic. Everything written later has to ground its facts in it.

  3. 3

    Every lesson is written twice, then judged.

    Two models from different vendors write each lesson independently, through your background. A third merges them and checks every risky claim against the sources, deleting what it can't support. A fourth re-checks and can only lower the trust, never raise it.

  4. 4

    Read while the rest is written.

    The first lessons open before the course is finished. Each ends with a quiz. Stuck? One click for a simpler explanation, more examples, or the sources. At the end there is an exam and a cheat sheet you keep. When a second model didn't answer, the lesson says so instead of pretending.

The whole pipeline, step by step, including what is switched off

Why not just ask a chatbot?

For a question you already know how to ask, do. A study mode in a chatbot is free and it is good at that. Three things it doesn't do.

It answers; it doesn't decide.
A chat covers what you thought to ask. A course decides what carries the topic for someone with your background, puts it in order, names what it is leaving out, and ends.
Nothing checks it.
A chat's confident sentence and its wrong sentence look identical. Here a second model judges every risky claim against sources, a third re-checks, and the ones that failed are printed on the page you read.
A thread scrolls away.
You get a document: a plan, lessons in order, quizzes, an exam, a cheat sheet. It is still there next month, and it doesn't depend on you remembering how you phrased things.

What we promise, and what we don't.

This product is about trust, so the limits belong on the first screen, not in the fine print.

We promise

  • A short course built around your goal, your background and the time you have.
  • Every risky claim checked against the sources collected for your topic.
  • Visible sources, visible verdicts, and an honest label wherever a check did not complete.
  • A task to try in every lesson and a quiz after it.
  • A straight answer when a topic doesn't belong in a course.

We don't promise

  • That every sentence is fact-checked. Risky claims are.
  • That you will pass the interview or the exam.
  • A measured “20% of concepts = 80% of understanding”. That is how we select material, not a proven outcome.
  • A replacement for a full course with practice and a mentor.
  • Medical, legal or financial advice.

$5

One course. That's the whole price.

Pay per course, by card, through Stripe. No subscription, no credits, nothing recurring. The demo courses are free to read.

Where it goes: most of your $5 is model calls: two searches, two independent drafts of each lesson, a judge that deletes what the sources don't support, and a second opinion. That is the reason it isn't free, and the reason it isn't slop.

Not what you needed? Reply to the receipt and we refund it.

What a course is

  • A short course written through what you already know, in the language you wrote in.
  • A quiz after every lesson, a final exam, and a cheat sheet you keep.
  • “Explain simply”, “more examples” and “sources” on every lesson.
  • The check on every lesson, and the list of what the course leaves out, with reasons.
  • Yours to reread for as long as the site exists.

What happens after you click

Two minutes of questions, then a short test you can skip. The plan arrives first: the core, the order, and what it decided to leave out. The first lessons open before the rest is written, so you start reading while it works.

Questions people ask first.

How long does it take?

The plan is ready in a few minutes. The first lesson usually opens in 10 to 40 minutes and the whole course within about an hour. Progress is saved on the server, so you can close the tab and come back.

Which languages?

Write your request in your language and the course is written in it. The interface is in English.

Who sees my text?

External AI services process it (OpenRouter (Anthropic, DeepSeek, Google, OpenAI, Thinking Machines, Xiaomi, Z.ai, xAI) · Perplexity). No person reads your course. Don't paste personal data or anything under NDA.

What if my topic doesn't fit?

Some topics don't belong in a text course: physical skills, medical or legal decisions, anything that needs a person who is accountable for the answer. We say so before you pay and suggest a workable alternative.

Can I trust it?

Trust the check, not the prose. Every lesson tells you what was verified against sources, what was softened, what was removed, and whether the check completed at all. For anything with real consequences, go to the primary source.

Say where you stand.

We have no testimonials. We have 2 courses you can read end to end without an account, and every claim in them is marked kept, softened or removed.

I already know . I need to be able to by .

Sign in with Google or a magic link.