v0.5Latest15 April 2026
Textbook-style economics diagrams
- AS-AD: axes now show arrows at ends with no tick numbers (qualitative style matching textbook diagrams). Dotted lines drop from the AD/SRAS equilibrium to both axes, with P₁ on the y-axis and Y₁ on the x-axis.
- Supply & Demand, Consumer Surplus: equilibrium annotations replaced with P* on the y-axis and Q* on the x-axis.
- Money Market: r* on the y-axis and M* on the x-axis; vertical dotted line added from Ms to the x-axis.
- Keynesian Cross: Y* label added on the x-axis, with Y*' shown when government spending shifts the curve.
- Monopoly: Pₘ on the y-axis and Qₘ on the x-axis; dotted lines from the monopoly point to both axes.
Renderer improvements
- New axis options: hideTicks (suppresses numeric tick labels) and arrowEnd (draws an arrowhead at the axis tip).
- New annotation property axisAlign ("x" or "y") — snaps a label to the axis on first render, then becomes freely draggable like any other annotation.
- New annotation property linkedCurve — when the named curve is hidden via the legend, its linked annotation is hidden automatically.
- Sub/superscript parser fix: without braces, the parser now consumes all characters until the next space or formatting symbol (e.g. 5^2e now correctly renders the full "2e" as superscript).
- Left padding increased when hideTicks is active so axis labels have breathing room.
Advanced editor — canvas size control
- New Canvas Size section in Advanced mode lets users set a custom width and height for the exported graph.
- Preset buttons: Widescreen (1600×1000), Standard (1200×750), Square (1000×1000), Portrait (800×1000).
- The canvas letterboxes within a fixed 16:10 container so the page layout never shifts.
Contact form — full redesign
- Three-tab form replacing the single feedback box: Share Feedback, Request Features, and Report a Bug.
- Bug report tab collects: description, which graph, steps to reproduce, expected vs actual behaviour.
- Feature request tab collects: graph name, subject area, description of desired behaviour.
- Form submissions are emailed in real-time via Resend with a styled HTML template — colour-coded by submission type, key-value table, and a reply button when an email address is provided.
- Contact page link in the post-download modal now opens in a new tab so the graph is not lost.
Legend improvements
- Curve label column renamed from "Labels" to "Legend" to clarify its purpose.
- Annotation text editing section removed from the sidebar — annotations are edited by dragging on the canvas.
- Hiding a curve in the legend now also hides any annotation linked to it via linkedCurve.
v0.411 April 2026
32 new IB curriculum tools
- Economics (9 new): Price Controls, Taxes & Subsidies, Negative Externalities, Positive Externalities, Monopoly Diagram, Lorenz Curve, Money Market, Foreign Exchange Market, Keynesian Cross.
- Physics (9 new): Boyle's Law, Charles's Law, Capacitor Charge & Discharge, Radioactive Decay, Blackbody Radiation, Doppler Effect, V–I Characteristics, Gravitational Fields, Nuclear Binding Energy.
- Chemistry (4 new): Reaction Rate Orders, Arrhenius Equation, Enthalpy Profile, Beer-Lambert Law.
- Biology (5 new): Survivorship Curves, Oxygen Dissociation Curve, Photosynthesis Rate, Predator–Prey Dynamics, Enzyme Activity.
- Mathematics (5 new): Binomial Distribution, Riemann Sums, Taylor / Maclaurin Series, Chi-Squared Distribution, Trigonometric Transformations.
- Total tool count grows from 17 to 49 across 5 subjects.
Canvas snapshot previews on tool cards
- Every graph tool card on the subject pages now renders a live canvas preview thumbnail at default parameters instead of a plain text placeholder.
- Previews are rendered client-side via GraphPreview at 800×500 logical pixels and scaled down via CSS, ensuring axis padding stays proportional.
- Simulation tools (e.g. Projectile Motion, Predator–Prey) show a "▶ Simulation" placeholder on their preview card.
- Each of the 49 registered tools has a corresponding preview config in previews.ts — 32 new entries added this release.
- A gradient overlay softens the bottom edge of each thumbnail for a cleaner card appearance.
v0.3Major Update11 April 2026
Consumer & Producer Surplus — full rewrite
- Replaced the old slider-based parameters (demand intercept, supply intercept, demand slope, supply slope) with direct equation inputs: type any linear expression such as P = 500 − 3Q or P = 20 + 1.5Q.
- The graph now accepts inputs in the form "a − bQ" (demand) or "a + bQ" (supply) and parses them automatically.
- Inline validation catches wrong formats, a demand curve with a positive slope, a supply curve with a negative slope, and cases where the two curves do not intersect at a positive quantity.
- Press Enter or click "Update Graph" to apply equations — the graph only updates when valid input is confirmed.
- Axes auto-scale to the equations: the Q-axis extends to where the demand curve hits zero; the P-axis scales to the demand intercept. Any price level (e.g. P = 5000) now renders correctly with no clipping or overflow.
- Consumer surplus (CS) and producer surplus (PS) areas are computed and labelled dynamically from the parsed equations.
- Equilibrium point, equilibrium price dashed line, Q* and P* annotations all update live with the entered equations.
Axis tick labels — clean number formatting
- Tick positions are now calculated using a "nice numbers" algorithm instead of dividing the range by a fixed count. The step size is always a round value of the form 1, 2, 2.5, 5 or 10 × 10ⁿ.
- A 0–1000 range with ~5 ticks now shows 0, 200, 400, 600, 800, 1000 instead of 0, 166.7, 333.3, 500, 666.7, 833.3, 1000.
- Integer tick values are displayed without a decimal point (e.g. "200" not "200.0"). Values that are genuinely non-integer show one decimal place.
- The same algorithm applies to both the X and Y axes on every graph across the site.
v0.2Foundation9 April 2026
Advanced Editor mode
- Every tool now has an /advanced route providing a full-screen editing environment with a collapsible sidebar.
- The sidebar contains five sections: Display, Text Sizes, Curves, Labels, and Colors.
- All advanced-only content is deferred to after client mount to prevent Next.js hydration mismatches.
Sidebar — Display section
- Toggle buttons to show or hide the grid and annotations.
- Grid opacity slider (0–100%) lets users fade gridlines to taste.
- Controls use pill-style toggle chips consistent with the rest of the UI.
Sidebar — Text Sizes section
- Independent size sliders for the graph title (10–32 px), axis labels (8–24 px), and annotations (8–24 px).
- Each slider shows a reset button (↺) when its value has been changed from default.
- MiniSlider component: compact inline layout with label, range input, numeric readout, and optional reset.
Sidebar — Curves section
- Each named curve listed with a colored dot, label, eye-toggle (show/hide), and dash-style chips (solid / dashed / dotted).
- Fill / shading curves show a "Shading" badge instead of line-style controls.
- Hiding a curve zeroes out its data points, keeping layout stable.
Sidebar — Labels section
- Each graph annotation (e.g. "Q*", "CS", "AD") is listed with an editable text field.
- Supports rich-text notation: ^ for superscript, _ for subscript (e.g. "Q^*", "P_0").
- Individual reset button (↺) per annotation to restore the original text.
- Annotations are reported from GraphCanvas to the context and kept in sync across re-renders.
Sidebar — Colors section
- Per-curve color overrides via a row of 10 preset swatches plus a native color picker.
- Fill curves are excluded from the Colors section (only line curves are colorable).
- A global "Reset all" button restores every color to its original value.
Graph title and axis label editing
- In advanced mode, the graph title and both axis labels become editable text inputs rendered directly on the canvas panel.
- Changes are applied to the canvas via the GraphEditContext.
Axis bounds editor
- A collapsible panel below the canvas lets users set custom X and Y axis min/max values.
- Uses a draft-string approach: changes are staged and only applied when the user clicks Apply, preventing broken intermediate states while typing.
- Invalid or out-of-range values display an inline error message. A Reset button restores the tool defaults.
- The panel stays permanently open in advanced mode.
Parameter controls upgrade
- Each parameter now shows both a range slider and a number input side by side.
- The number input uses a local draft state: type freely, commit on blur or Enter. Values are clamped to [min, max] and snapped to step on commit.
- The slider syncs to the number input and vice-versa without fighting each other.
Copy and export buttons
- Copy to Clipboard and Download PNG buttons moved outside the canvas overlay to a dedicated row below the graph.
- This avoids z-index conflicts and keeps the canvas surface clean.
Canvas renderer improvements
- CanvasRenderer accepts gridOpacity, titleSize, annotationSizeOverride on GraphConfig.
- AxisConfig now accepts labelSize to set per-axis label font size.
- drawGrid() respects globalAlpha for opacity.
- drawAnnotation() accepts a per-call size override.
- Rich-text parser supports ^ (superscript) and _ (subscript) inline in any label or annotation.
Site structure and pages
- Full Next.js App Router site with static generation for all tool pages.
- Pages: Home, Subjects index, per-subject listing, individual tool pages, About, Contact, Privacy Policy, Terms of Service.
- Dark mode toggle with system-preference detection and persistent localStorage storage.
- Header search with live filtering across all registered tools.
- Responsive layout with Tailwind CSS v4 (no config file, pure CSS import).
- ShareToolbar with copy-link functionality on every tool page.