From e0ec6a52180636077c53916a65b873a2ccf4e5c3 Mon Sep 17 00:00:00 2001 From: NickSeagullBot Date: Mon, 21 Sep 2026 18:13:49 +0100 Subject: [PATCH] Rewrite landing page around explicit semantics --- docusaurus.config.js | 3 +- src/pages/index.tsx | 509 +++++++++++++------------------------------ 2 files changed, 148 insertions(+), 364 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 26ae00b..dfeec59 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -8,7 +8,8 @@ const lightCodeTheme = require("prism-react-renderer/themes/shadesOfPurple"); /** @type {import('@docusaurus/types').Config} */ const config = { title: "NeoHaskell", - tagline: "A Haskell dialect to think less and do more", + tagline: + "A language and application model for explicit decisions, meaningful history, and software people can explain.", favicon: "img/favicon.ico", // Set the production url of your site here diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 727b691..8c1510a 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,361 +1,209 @@ import React from "react"; -import clsx from "clsx"; import Link from "@docusaurus/Link"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; import Layout from "@theme/Layout"; -import HomepageFeatures from "@site/src/components/HomepageFeatures"; import CodeBlock from "@theme/CodeBlock"; -import styles from "./index.module.css"; import Frame from "../components/Frame"; import Button from "../components/Button"; -import CodeFrame from "../components/CodeFrame"; -import Dialog from "../components/Dialog"; -import Modal from "../components/Modal"; -import Disclaimer from "../components/Disclaimer"; const dynC = (className: string, color: string) => `${className}-light${color}`; function HomepageHeader() { - const { siteConfig } = useDocusaurusContext(); return (
-
-

- Software Development Is Broken.{" "} - - We're Fixing It From The Language Up. - -

-
+

+ Code Can Be Generated.{" "} + + Meaning Has To Be Designed. + +

+

- Every successful software company follows the same tragic arc: -

-

- - Day one: pure creativity, features ship in hours, - everyone understands everything. -

-

- - Year one: velocity slows, meetings multiply, "technical debt" - enters the vocabulary. -

-

- - Year three: the rewrite discussions begin. -

-

- - Year five: half your budget maintains what the other half tries to - replace. -

-

- This isn't incompetence. It's not bad management. It's the - inevitable result of building on foundations that turn human - thoughts into machine instructions through layers of mistranslation. -

-

The Broken Telephone Architecture

-

- Watch how a simple business need travels through your organization: -

-

- The CEO says: "When customers upgrade, we should celebrate with - them." -

-

- The CTO interprets: "Upon plan upgrade, trigger celebration - workflow." -

-

- The Product Manager writes: "Implement upgrade handler with - notification service integration." -

-

- The Developer codes:{" "} -

-              
-                UPDATE users SET plan = 'premium'; INSERT INTO notifications...
-              
-            
+ AI can produce an endpoint, a database migration, or a handler in + seconds. That makes software faster to start. It does not make the + resulting system easier to understand.

-

- Six months later, nobody remembers why that code exists. The - celebration feature breaks. The developer who wrote it left. The new - developer is afraid to touch it. The cycle of decay has begun. +

+ The hard part is preserving what the system means: which requests + it accepts, which rules it applies, what facts it keeps, and why the + current state exists. When that meaning is scattered across + generated files, framework conventions, tickets, and tribal + knowledge, every change begins with archaeology.

-

- This isn't a people problem. It's a technology problem. We're - forcing humans to speak machine when machines should speak human. +

+ + NeoHaskell is a language and application model for keeping those + semantics explicit. + {" "} + It brings business decisions, retained history, and useful views + into one model that people can discuss and the compiler can check.

-

Technology Shapes Thought

-

- The tools we use shape how we think. When your language forces you - to express everything as CREATE, READ, UPDATE, DELETE, you start - seeing the world as records to manipulate rather than events that - happen. You stop thinking "customer upgraded" and start thinking - "update customer record." + +

+ Generated Artifacts Are Not A System Model +

+

+ An API describes how a request arrives. A table describes how data + is stored. A handler describes what a program does next. None of + them, on its own, explains why a change is allowed, who can make it, + what should be remembered, or what the rest of the business needs + to know.

-

- This subtle shift is poison. It disconnects your code from your - business. It makes simple things complex. It makes change dangerous. - It makes your software brittle where it should be antifragile. +

+ Code generation can reproduce that architecture more quickly, but + it cannot supply the missing meaning. The faster artifacts + multiply, the more important it becomes to give the system an + explicit semantic core.

-

- The oldest ideas survive because everything unnecessary has been - stripped away. Double-entry bookkeeping has worked for 700 years. - Event ledgers are how humans naturally think about change. Banks - don't UPDATE your balance; they record deposits and withdrawals. - History doesn't UPDATE the past; it records what happened. + +

+ Model Decisions, Not Just Data +

+

+ NeoHaskell starts with the behavior your application exists to + perform. For each small slice, name four things:

-

- Why did we abandon this natural model for CRUD? +

+ - Request: what someone is asking the system to do.

-

- Because storage was expensive. Because computers were slow. Because - we optimized for machines instead of humans. +

+ - Decision: the rule that accepts or refuses that + request.

-

- Those constraints are gone. It's time for software development to - become human again. +

+ - Accepted fact: what is worth retaining when the + rule succeeds.

-

- Enter NeoHaskell: Where Business Events Become Code -

-

- NeoHaskell isn't just another programming language. It's a - fundamental rethinking of how human intention becomes running - software. +

+ - Useful view: the information someone needs next.

-

- When your business team says "customer plan upgraded" that's - literally how you write it: +

+ Instead of reducing “the customer upgraded” to a row update, make + the request and the accepted fact visible in the program:

- {`data CustomerPlanUpgraded = CustomerPlanUpgraded + {`data UpgradeCustomerPlan = UpgradeCustomerPlan { customer :: CustomerId, - fromPlan :: Plan, - toPlan :: Plan, - upgradeDate :: DateTime + newPlan :: Plan + } + +data CustomerPlanUpgraded = CustomerPlanUpgraded + { customer :: CustomerId, + previousPlan :: Plan, + newPlan :: Plan, + acceptedAt :: DateTime } `}

-

- No translation. No abstraction. No impedance mismatch. Your business - logic reads like a business conversation. +

+ The names are not decoration. They give domain experts and + developers the same concepts to question before those concepts + disappear inside implementation detail.

-

What Makes NeoHaskell Different

-

- Event Sourcing Is The Language, Not A Library + +

+ Let History Explain The Current State

-

- Other languages make you fight for event sourcing. You need - frameworks, libraries, careful discipline. One mistake and you're - back in CRUD hell. +

+ A balance, booking status, or subscription tier is a summary. With + event sourcing, accepted domain events form the retained history + from which that state is reconstructed. A correction can add a new + fact instead of silently rewriting the past.

-

- In NeoHaskell, event sourcing isn't something you add. It's - something you'd have to work to avoid. Every state change is an - event. Every event is immutable. Every system is automatically - auditable, replayable, debuggable.{" "} - - The compiler doesn't let you store something in the database where - you're not supposed to. - +

+ That history makes more questions answerable: what happened, in + what order, and which recorded facts produced the state we see now. + It only explains what the application chose to record, so reasons, + authority, and evidence still have to be designed deliberately.

-

- Mathematical Guarantees, Human Expression + +

+ Put Semantics Where Tools Can Protect Them

-

- From Haskell, we inherit something profound: if it compiles, it - works. This isn't marketing, it's math. Entire categories of errors - become impossible. Race conditions, null pointer exceptions, type - mismatches, all gone. +

+ A library can recommend a pattern. A team convention can ask people + to remember it. A language and compiler can make important parts of + the model visible and checkable as the system changes.

-

- But unlike Haskell, we've optimized for developer happiness, and we - chase your success at all costs. The standard library feels - familiar. There are no millions of operators to memorize. The - concepts map to how you already think. The error messages actually - help. +

+ NeoHaskell is being built around that deeper layer: a language, + application framework, CLI, and visual IDE that share the same + concepts. Requests, decisions, events, and views are not an + after-the-fact diagram. They are structures in the program.

-

- Linear Complexity In A Exponential World + +

+ The Compiler Checks Structure. People Decide What Is Right.

-

- In traditional systems, feature #100 might take 10x longer than - feature #10. Dependencies tangle. Side effects multiply. Fear creeps - in. -

-

- In NeoHaskell, feature #1000 takes the same effort as feature #1. - New events don't break old ones. New handlers don't destabilize - existing ones. Your system grows by addition, never by modification. -

-

Where We Are Today

-

- NeoHaskell is not complete. We're building this in public, with real - production users, solving real problems. -

-

What's Already Working:

-

- - A Beautiful Standard Library: Carefully crafted APIs that make - simple things trivial and complex things possible. Every function - documented, every pattern thoughtful. -

-

- - Production-Ready Concurrency: Channels for message passing. Locks - when you need them. Thread-safe variables that actually work. These - are the primitives NeoHaskell is built on top of, ensuring your - system is not only correct, but also blazing fast. -

-

- - In-Memory Event Store: Perfect for development and testing. Your - events are safe, queryable, replayable. -

-

- - PostgreSQL Event Store (In Progress): Because production needs - production databases. Built on boring, bulletproof technology. - Coming together beautifully. -

-

What's Coming:

-

- We're building toward a complete platform that generates everything - you need from your event model. Automatic API generation. - Infrastructure that scales. Deployment that just works. The ease of - low-code with the power of real programming. -

-

- Imagine describing your business events and getting: -

-

- - A GraphQL (or Swagger, or gRPC, or...!) API that updates in - real-time -

-

- - A scalable infrastructure that handles millions of events -

-

- - Complete observability—know everything that ever happened -

-

- - Time travel debugging—replay any scenario instantly -

-

- - The ability to fork a stream of events from your production - environment to your development environment for debugging -

-

- - Perfect audit trails—compliance becomes trivial +

+ Types and compiler checks can rule out invalid combinations and + expose mismatched assumptions. Tests can provide evidence for the + success, refusal, and boundary cases they cover. Neither can decide + whether a business rule is fair, complete, or correct for the real + world.

-

- This isn't fantasy. We've already done parts of this in the past. - With every release, more becomes automatic. +

+ AI coding agents can help write the implementation. People who + understand the domain still choose the policy. NeoHaskell aims to + keep that policy visible long enough to discuss, implement, review, + and change without pretending that generated code is the decision + itself.

+

- The Philosophy: Remove Everything That Gets In The Way + Make The Next Change Small Enough To Explain

-

- We're not adding features for their own sake. Every decision follows - a simple principle: does this remove friction between human - intention and running software? -

-

- - Configuration files? Removed. Your code should express intent - clearly enough. -

-

- - Dependency hell? Removed. One tool, one purpose, one way that - works. -

-

- - DevOps complexity? Removed. From code to cloud in one command. -

-

- - The fear of change? Removed. If it compiles, it works. -

-

Who This Is For

-

- You're a startup founder who knows that initial technical decisions - determine your company's fate. You can't afford to be rewriting in - two years when you should be scaling. -

-

- You're an enterprise architect tired of managing complexity instead - of creating value. You want systems that grow gracefully, not ones - that calcify. -

-

- You're a developer who came to this field to build, not to debug. - You want to write business logic, not boilerplate. -

-

- You're a product manager exhausted by "technical limitations." You - want your ideas to become features, not tickets that languish in - backlogs. -

-

- You're a CEO who suspects you're spending too much on engineering - for too little output. You're right. And it's not your team's fault. -

-

The Invitation

-

- We're not asking you to trust us blindly. We're building this with - real companies, solving real problems, in production, today. -

-

- If you're tired of: -

-

- - Features that get exponentially harder to implement -

-

- - Teams that grow faster than output -

-

- - Systems that everyone fears to change -

-

- - The constant specter of "the rewrite" +

+ Build one useful behavior from request through decision, accepted + fact, and view. Check the ordinary success case, the refusal case, + and the boundaries. Then add the next slice without hiding the old + meaning.

-

- Join us. +

+ This does not make change automatic. Shared events and existing + history still require deliberate coordination. It does give the + team stable concepts to reason about instead of asking every future + contributor to reverse-engineer intent from side effects.

-

- Software development should be joyful, not painful. Systems should - become more valuable over time, not more dangerous. Technology - should amplify human creativity, not constrain it. Your 1000th day - of development should feel like your first. + +

Where NeoHaskell Is Today

+

+ NeoHaskell is a work in progress, built in public. The goal is not + to produce more code than existing tools. It is to make software + meaning explicit enough that humans and tools can work from the + same model.

-

Start Today

-

- NeoHaskell is ready for pioneers. If you're building something new, - if you're ready to escape the rewrite trap, if you believe software - can be better: We're waiting for you. +

+ The language, application framework, Neo CLI, and visual IDE are + being developed together around this workflow. You can follow the + project, try the current pieces, and help shape what comes next.

-

- The revolution isn't coming. It's being typed right now, one event - at a time, by developers who refuse to accept that suffering is the - price of scale. + +

Start With One Rule You Can Explain

+

+ Pick one behavior in your system. Name the request, the decision, + the fact worth keeping, and the information needed next. If the + team can discuss that model clearly, implementation has a meaning + to preserve.

-

+

- Welcome to NeoHaskell. Welcome to software development as it - should be. + Build systems whose current state has a history—and whose code + still says what the business meant.

-

- - The old world optimizes for machines. We're optimizing for humans. - Join us. - -

+
@@ -369,7 +217,7 @@ function HomepageHeader() { @@ -402,72 +250,7 @@ export default function Home(): JSX.Element { return (
- {/* */} - - {/*
- -
- - -
- -
- -

- A Community for People Like You -

-
-

- NeoHaskell is a community of people who are passionate - about delivering software in an efficient and enjoyable - way. We believe that programming should be fun, and that - the best way to learn is to build things. -

-

- Therefore, NeoHaskell is a work in progress project. We - are aiming to build a language that is delightful to learn - and use,{" "} - - strongly focusing on optimizing developers' happiness - - . -

-

- Whether you're a freshman or a senior, a hacker or a - rocket scientist, you'll find a place in our community. -

-

- Together, we are building the best language for the next - generation of developers. Join us! -

-
- -
- -
-
-
*/}
);