# curvat.io — Visual Geometry & Dynamic Calculus > "Think in curves." Curvat.io is a modern, zero-build, client-side web application for interactive geometry and dynamic calculus exploration, designed for students, educators, and researchers. ## Overview - **Name**: curvat.io (formerly OpenGraph) - **Tagline**: Think in curves. | Visual Geometry & Dynamic Calculus - **Publisher**: EduNetSystems (https://edunetsystems.com) - **License**: 100% Free Educational License (No accounts, no subscriptions, no paywalls) - **Architecture**: Zero-build pure ES6+ vanilla module architecture. 100% client-side calculation using JSXGraph, MathJS, MathLive, and KaTeX. ## Key URLs - Main Application: https://curvat.io/ - AI Assistants & WebMCP: https://curvat.io/agents - Visual Calculus Gallery: https://curvat.io/gallery - Student Privacy Policy: https://curvat.io/privacy - Accessibility Statement: https://curvat.io/accessibility - Terms & Educational License: https://curvat.io/terms ## Privacy & Educational Architecture - **Account Requirement**: None. 100% anonymous usage. - **Client-Side Security**: All equation evaluations, derivatives, integrals, and coordinate geometry execute locally on the user's device. Curvat does not transmit formulas to AI models or remote compute engines; connected AI assistants process equations under their own provider's terms. - **Classroom & LMS Privacy**: When embedded inside Learning Management Systems (Canvas, Blackboard, Moodle, Google Classroom, Schoology) or accessed with `?embed=true`, analytics tracking is completely disabled and zero advertising or tracking cookies are created, supporting FERPA- and COPPA-conscious classroom use. ## Accessibility (WCAG 2.1 Level AA) - Full physical keyboard navigation with LaTeX shortcuts (`/` for fractions, `^` for exponents). - Accessible on-screen virtual keyboard with elevation physics for mobile/touch screens. - Dashed stroke toggle for non-color shape differentiation (color vision deficiency support). - ARIA live region announcements for coordinate plane updates. - Respects `prefers-reduced-motion`. ## Embedding in LMS & Courses Curvat.io graphs can be embedded into any LMS via iframe: ```html ``` ## Curriculum Presets - Tangent Line & Extrema (Cubic): `https://curvat.io/?preset=tangent-extrema` - Riemann Sums & Definite Integrals: `https://curvat.io/?preset=riemann-sums` - Definite Integral & Bounded Area: `https://curvat.io/?preset=definite-integral` - Interactive Unit Circle & Trigonometry: `https://curvat.io/?preset=unit-circle` - Trigonometric Radian Scale (π/2): `https://curvat.io/?preset=trig-radian-scale` - Conic Sections & Native Implicit Curves: `https://curvat.io/?preset=conic-implicit` - Dynamic Lagrange Polynomial Interpolation: `https://curvat.io/?preset=lagrange-geometry` - Vertical Line Test for Functions: `https://curvat.io/?preset=vertical-line-test` ## Assistant & Automation Integration (window.__curvat) Curvat.io provides an agent-friendly, browser-first integration facade for personal assistants, AI tutors, and browser automation: - **Positioning**: *"Interactive calculus and geometry for people and their assistants."* - **Architecture**: 100% client-side calculation on the user's device with zero backend compute. See Privacy Details (https://curvat.io/privacy) for wider site telemetry and measurement practices. - **Privacy Boundary**: Standard fragment links (`#g=...`) are computed entirely client-side and never reach server logs. Optional query imports (`?expr=...`) travel in the initial HTTP GET request to hosting server logs before client-side hydration replaces the URL with a canonical `#g=` fragment. ### 1. Repeatable Expression URLs Load curves directly via repeated `expr` parameters with optional four-value bounds (`xmin`, `xmax`, `ymin`, `ymax`): - Two explicit curves: `https://curvat.io/?expr=x%5E2&expr=2x%2B1` - Implicit circle with bounds: `https://curvat.io/?expr=x%5E2%2By%5E2%3D25&xmin=-7&xmax=7&ymin=-7&ymax=7` - Dynamic parameter slider: `https://curvat.io/?expr=a%3D2&expr=y%3Da*x%5E2` ### 2. Browser Automation Facade (`window.__curvat`) The global facade (`apiVersion: 1`) provides atomic operations and optimistic revision safety: ```javascript // Check capabilities const caps = window.__curvat.getCapabilities(); // Inspect state and current revision const state = window.__curvat.getState(); // Atomic graph replacement (requires expectedRevision) await window.__curvat.applyGraph({ expressions: ['x^2', '2x+1'], bounds: { xmin: -6, xmax: 6, ymin: -6, ymax: 6 } }, { expectedRevision: state.revision }); // Update a single expression card await window.__curvat.updateEntry('entry-2', { raw: '3x-1' }, { expectedRevision: window.__curvat.revision }); // Generate canonical share link const links = await window.__curvat.getShareLinks(); console.log(links.data.shareUrl, links.data.embedUrl); // Export high-resolution PNG or SVG image const img = await window.__curvat.exportImage({ format: 'png', scale: 2 }); // Guarded undo of last assistant batch await window.__curvat.undoLastAgentChange({ expectedRevision: window.__curvat.revision }); ``` ### 3. WebMCP Browser Assistant Tools When supported by the browser (via `modelContext.registerTool`), curvat.io automatically exposes 8 native assistant tools (`get_capabilities`, `get_state`, `validate_graph`, `apply_graph`, `update_entry`, `get_share_links`, `export_image`, `undo_last_agent_change`). Full documentation, tool schemas, and safety guidelines: https://curvat.io/agents. ## Contact & Support - Email: privacy@edunetsystems.com / accessibility@edunetsystems.com / jtredden@gmail.com - Organization: EduNetSystems