Skip to content

Submission Format

Every deliverable in this course β€” exercises and projects β€” is submitted as a GitHub Pages site backed by a public repository. One repository, for the whole semester, that grows one folder at a time.

That accumulation is the point. At the end of the semester you are not holding four disconnected assignments; you are holding a portfolio you can show to someone.

Register your repository once

Submit the link through this form β€” once, at the start of the semester. There is nothing to re-submit at each deadline: the repository is the same all term, and the deadline is decided by your commits. Fill the form again only if you move the repository. A second response from the same email supersedes the first.

The repository

Fork the course template β€” MkDocs + Material with a GitHub Actions workflow that publishes on every push, the same stack this site runs on. Keep the repository public, so it can be read for grading and so it works as a portfolio.

Required layout

The folder name is the contract. It is how each deliverable is located:

docs/
  index.md                     # your landing page β€” who you are, what is here
  exercises/
    data/index.md
    perceptron/
      index.md                 # the report
      code/                    # the sources you actually ran
      figures/                 # the figures the report shows
    mlp/index.md
    vae/index.md
  projects/
mkdocs.yml
requirements.txt               # so someone else can re-run your code

The slugs are fixed β€” data, perceptron, mlp, vae β€” and match this site.

Required front matter

At the top of each report:

---
exercise: perceptron
ai_use: "Claude for the Figure 3 plotting code; the analysis is mine."
---

ai_use is mandatory and may be "none". AI collaboration is allowed; not declaring it is what causes a problem.

Required structure

Your headings mirror the statement, in the same order:

## Exercise 1
### A β€” Generate the data
### B β€” Implement the perceptron
...
## Results summary

This is not bureaucracy. Each grading criterion is tied to an item letter, so a report that follows the statement's shape gets read against the right criterion. A report that scatters the items makes the grader hunt, and a grader that has to hunt finds less.

The last section is always the Results summary table from the exercise page, with its rows in order and the # column intact. Fill in every row: a blank row is read as "not done", even when the number is buried somewhere in your text.

Code lives in files

Every script goes under code/, and the report pulls it in rather than only pasting it:

``` python
\--8<-- "docs/exercises/perceptron/code/perceptron.py"
```

Code that exists only as text on the page cannot be run, and being able to re-run it is a graded criterion. The same goes for figures: ![Figure 1](figures/fig1.png), committed to the repository β€” a figure that is only mentioned has not been delivered.

Deadlines

The deadline is the timestamp of your last commit touching that exercise's folder. Not the form, not the push to Pages β€” the commit.

Commit as you go. A single commit at 23:58 on the due date is perfectly legal and will be graded normally, but it leaves no trace of how the work happened, and it is exactly the submission an oral exam will ask you to explain.

Before you submit

  • The repository is public and the Pages site actually builds
  • docs/exercises/<slug>/index.md exists, with the exact slug
  • Front matter with exercise: and ai_use:
  • Headings mirror the statement: Exercise N, then A, B, C, D
  • Every figure the statement asks for is committed and displayed, numbered
  • Every script is a file under code/ and runs from a clean checkout
  • The Results summary table is filled in, every row
  • Each analysis question is answered with the number that supports it
  • Your last commit is before the deadline

What gets read

The published site is your portfolio. The repository is what gets graded: the Markdown source, the code as files, and the git history. So a beautiful site whose repository is missing the code is not a complete delivery β€” and a repository with everything in place whose CI happens to be broken still is.