Starter
Perfect for getting your first real-world experience
- Solution architecture package
- Jira board setup & account
- 3 code reviews included
- 1 hour of mentoring
- Basic project complexity
- Email support
Live from the forge
You need experience to get experience, so we put the experience on the page. Nothing below is a mockup: every demo is hand-built, running live, and part of what you'll learn to build on real client projects.
Hand-rolled canvas particles. No library, about 90 lines.
The exhibit's actual update loop, the same code running above.
// The whole trick: a pooled particle array, one rAF loop,// and knob values read from a ref so React never re-renders per frame.function step(sparks, w, h, knobs) { const wind = (knobs.draft / 50) * 0.045; for (const s of sparks) { s.vx += wind + (Math.random() - 0.5) * 0.02; // wind + turbulence s.vy -= 0.004; // buoyancy s.x += s.vx; s.y += s.vy; s.age++; }}// The loop only runs while lit, on-screen, and the tab is visible:// IntersectionObserver + visibilitychange gate the rAF. At rest this// exhibit costs the page nothing. That discipline is the lesson.
Every project ships through reviews like this one: line-anchored, specific, and about habits, not nitpicks.
How the typing works: data-driven, interruptible, cleaned up.
// The animation is a cursor over data: the diff itself is typed rows,// so "typing" is one setTimeout chain and cleanup is one clearTimeout.type Row = { kind: "ctx" | "del" | "add"; text: string; comment?: number }; useEffect(() => { if (reduce) { setCursor(DIFF.length); return; } // reduced-motion: instant if (cursor < DIFF.length) { const t = setTimeout(() => setCursor(c => c + 1), LINE_MS); return () => clearTimeout(t); // no orphaned timers }}, [reduce, cursor]);
Anatomy of this page
Every H2 on this page runs this exact code. Probe it:
// SplitHeading: every section heading on this pagevoid document.fonts.ready.then(() => { split = SplitText.create(el, { type: "chars", aria: "auto", }); gsap.fromTo(split.chars, { opacity: 0, y: "0.3em", filter: "blur(8px)" }, { opacity: 1, y: 0, filter: "blur(0px)", stagger: 0.02, onComplete: () => split.revert() });});// …triggered by a one-shot IntersectionObserver
Split before the webfont lands and you measure the fallback font: wrong widths, wrong line breaks, a visible reflow. Waiting one promise fixes a bug most sites ship.
You'll learn why, not just how.
That's the whole promise: shown, not told.
Includes client work delivered before the platform launched.
From sign-up to job-ready: one piece of steel, four stations.
Sign up and tell us about your skills, goals, and preferred tech stack.
Browse available projects and apply for roles that match your expertise.
Join a team, receive architecture docs, Jira setup, and start building.
Complete projects, build your portfolio, and land your dream job.
Three billets, one anvil. Choose the steel that matches your ambition.
Perfect for getting your first real-world experience
For developers ready to tackle complex challenges
Maximum support for ambitious developers
Need more? Add code reviews at €25 or mentoring hours at €50, anytime.
Every mentor here passed the bar below. No exceptions, no honorary seniors.
First stories
Real stories, with names and shipped projects, will land here when they ship. Nothing fabricated, ever.
Whether you're looking to grow your skills, share your expertise, or find talented developers, there's a place for you at Blacksmith.Works.
Join real-world projects, gain professional experience, receive expert mentorship, and get your code reviewed by industry professionals.
Share your expertise and help shape the next generation of developers. Apply to become a mentor or code reviewer.
Partner with us to get your work done while helping junior developers gain real-world experience. Quality-assured output.
Whether you're a developer ready to prove your skills or a company looking for motivated talent, the forge is open. Join Blacksmith.Works today.
14-day refund window · Cards via Halk Bank · Built in the open