API Camp
Build a progress tracker that records completed lessons and calculates a certificate-ready score.
- Python
- pytest
- Playwright
API Camp · Full cohort portfolio lab
Each tutorial supplies a small Python domain-model starter, pytest acceptance checks, and a Playwright user-journey scaffold for the local interface you build.
One setup for every project
python -m venv .venvpython -m pip install pytest pytest-playwrightpython -m playwright install chromiumpython -m pytest -vScope: these are learning scaffolds, not completed implementations of the original products. Build the behavior, connect the interface, replace placeholder criteria with real rules, and make the tests pass locally before presenting a project as portfolio evidence.
Choose your build
28 tutorials shown
Build a progress tracker that records completed lessons and calculates a certificate-ready score.
Build a small provider-neutral text-generation API with a deterministic fake model and an explicitly optional live adapter.
Build a ten-week study-plan engine that schedules topics and records evidence.
Build a resource directory that filters tools by a visitor’s goal.
Build a domain-quality scorer with explainable recommendations.
Build an approval-first content queue with explicit delivery states.
Build a focus-rule evaluator that decides whether a URL should be redirected.
Build a topic-lane manager that replaces an open-ended video feed.
Build a mobile viewing queue with focus timers and avoid rules.
Build a validated study-resource catalog for video links and notes.
Build a consent-first message scheduler with claim tokens.
Build a review-first recommendation queue with resumable posting.
Build a job runner that tracks queued, running, completed, and failed work.
Build a book-title extraction pipeline with a human review queue.
Build a campaign planner that validates destinations before scheduling.
Build a skill-gap scorer from a collection of job listings.
Build a hosting chooser that captures consented leads.
Build a bounded comment-cleanup planner with a 500-item limit.
Build a licensed cleanup planner for batches up to 5,000.
Build a configurable high-volume cleanup runner with operational safeguards.
Build a small license validation service with expiry and edition checks.
Build an audit scorer that turns findings into a scoped service proposal.
Build a release verifier for Free, Pro, Enterprise, and license-server packages.
Build a customer-first hosting comparison and lead-magnet workflow.
Build a 30-day content queue with traceable campaign links.
Build an editorial validator for article structure and sourcing.
Build a safe bulk-upload validator with a reproducible sample fixture.
Build a small library system and prove it with reusable fixtures.
Build a progress tracker that records completed lessons and calculates a certificate-ready score.
Dataclasses, sets, validation, and percentage calculations.
Fixtures for fresh learner state and parametrized progress boundaries.
Complete a challenge, inspect the progress bar, and verify the completion state.
from dataclasses import dataclass, field
@dataclass
class ApiCampProject:
completed: set[str] = field(default_factory=set)
def complete(self, criterion: str) -> None:
if not criterion.strip():
raise ValueError("criterion is required")
self.completed.add(criterion)
def is_portfolio_ready(self) -> bool:
required = ["Duplicate lesson completions do not inflate progress","Progress stays between 0 and 100","The browser announces a completed challenge","A README explains the learning workflow"]
return all(item in self.completed for item in required)
import pytest
from app import ApiCampProject
@pytest.fixture
def project():
return ApiCampProject()
@pytest.mark.parametrize("criterion", [
"Duplicate lesson completions do not inflate progress",
"Progress stays between 0 and 100",
"The browser announces a completed challenge",
"A README explains the learning workflow"
])
def test_each_criterion_can_be_completed(project, criterion):
project.complete(criterion)
assert criterion in project.completed
def test_project_is_ready_only_after_all_criteria(project):
assert project.is_portfolio_ready() is False
for criterion in ["Duplicate lesson completions do not inflate progress","Progress stays between 0 and 100","The browser announces a completed challenge","A README explains the learning workflow"]:
project.complete(criterion)
assert project.is_portfolio_ready() is True
from playwright.sync_api import Page, expect
def test_api_camp_tutorial(page: Page):
page.goto("http://127.0.0.1:8000")
expect(page.get_by_role("heading", name="API Camp")).to_be_visible()
page.get_by_role("button", name="Run portfolio check").click()
expect(page.get_by_role("status")).to_have_text("Ready for review")
Finish with a public README, one passing terminal screenshot, and a short explanation of the failure you fixed.