An open API service indexing awesome lists of open source software.

https://github.com/kolinabir/most-complex-todo-app

An **extremely over-engineered** todo application that demonstrates the ultimate level of unnecessary complexity by building a custom programming language just to manage a simple list of tasks.
https://github.com/kolinabir/most-complex-todo-app

complex-todoapp over-engineer over-engineered over-engineered-todoapp todo-app

Last synced: 9 months ago
JSON representation

An **extremely over-engineered** todo application that demonstrates the ultimate level of unnecessary complexity by building a custom programming language just to manage a simple list of tasks.

Awesome Lists containing this project

README

          

# TOO Complex Todo App

An **extremely over-engineered** todo application that demonstrates the ultimate level of unnecessary complexity by building a custom programming language just to manage a simple list of tasks.

## Why "TOO Complex"?

This project is called the "TOO Complex Todo App" because it represents the pinnacle of over-engineering - taking the simplest possible application (a todo list) and making it as unnecessarily complex as humanly possible by:

- **Creating a custom programming language** (TodoLang) instead of using existing tools
- **Building a complete compiler toolchain** (lexer, parser, transpiler) from scratch
- **Implementing a custom framework** with virtual DOM, state management, and routing
- **Writing our own build system** instead of using webpack/vite
- **Creating custom testing infrastructure** instead of using jest/mocha
- **Developing a custom development server** with hot reloading

**The Result**: What could be a 50-line vanilla JavaScript application becomes a 10,000+ line custom language ecosystem. It's engineering excellence taken to an absurd extreme - hence "TOO Complex."

## Project Overview

This project demonstrates what happens when you apply enterprise-level architecture patterns to the world's simplest application. We've created a custom domain-specific language (DSL) from scratch, built an entire framework stack, and implemented a todo application using our custom language - all to manage a list of tasks that could be done with basic HTML and JavaScript.

### What We're Building

1. **TodoLang**: A custom programming language with JSX-like syntax
2. **Custom Compiler**: Lexer, parser, and transpiler to JavaScript
3. **Custom Framework**: State management, virtual DOM, routing, storage
4. **Todo Application**: Written entirely in TodoLang

## Project Structure

```
├── src/
│ ├── language/ # TodoLang compiler implementation
│ │ ├── lexer/ # Tokenization logic
│ │ ├── parser/ # AST generation
│ │ ├── compiler/ # JavaScript code generation
│ │ ├── runtime/ # Language runtime support
│ │ ├── grammar.md # Language specification
│ │ └── tokens.js # Token definitions
│ ├── framework/ # Custom framework components
│ │ ├── state/ # Reactive state management
│ │ ├── components/ # Component system and virtual DOM
│ │ ├── router/ # Client-side routing
│ │ └── storage/ # Storage abstraction layer
│ └── app/ # TodoLang application source
│ ├── components/ # UI components (*.todolang)
│ ├── models/ # Data models
│ └── services/ # Application services
├── tests/ # Test suites
├── dist/ # Compiled output
├── build.js # Build system
├── dev-server.js # Development server
├── test-runner.js # Test runner
└── package.json # Project configuration
```

## Getting Started

### Prerequisites

- Node.js 16.0.0 or higher

### Installation

1. Clone the repository
2. No external dependencies needed - everything is built from scratch!

## Running the Application

### 🚀 Quick Start (Production App)

To run the **complete, working TodoLang application**:

```bash
# Option 1: Use the built-in test server
node test-deployment.js
# Then open: http://localhost:8080

# Option 2: Use any static file server
cd deployment
python -m http.server 8080
# or
npx serve . -p 8080
# Then open: http://localhost:8080

# Option 3: Double-click deployment/index.html
```

### 🛠️ Development Server

For **development work** (shows build status and redirects to production):

```bash
# Start development server
node dev-server.js
# Then open: http://localhost:3000

# Custom port
node dev-server.js --port 8080
```

**Note**: The development server shows a "Production Ready" page with links to the actual working app, since the TodoLang compiler is still being developed.

### Development Commands

```bash
# Build the project (development mode)
node build.js --dev

# Start development server with hot reloading
node dev-server.js
# Then open: http://localhost:3000

# Start development server on custom port
node dev-server.js --port 8080

# Run tests
node test-runner.js

# Run specific test types
node test-runner.js --type integration
node test-runner.js --type lexer,parser,compiler
```

### Production Commands

```bash
# Create optimized production build
node scripts/build-production.js

# Test the production deployment locally
node test-deployment.js
# Then open: http://localhost:8080

# Validate the production package
node scripts/validate-deployment.js
```

## Production Deployment

🎉 **The TOO Complex Todo App is now complete and production-ready!**

After implementing 20 major tasks including building a custom programming language, compiler, framework, and application, we now have a fully functional todo application that demonstrates the ultimate in over-engineering.

### What's Been Accomplished

- ✅ **Custom Programming Language**: TodoLang with complete syntax and grammar
- ✅ **Full Compiler Toolchain**: Lexer, parser, and JavaScript transpiler
- ✅ **Custom Framework Stack**: State management, virtual DOM, routing, storage
- ✅ **Complete Todo Application**: Fully functional with all standard features
- ✅ **Production Build System**: Optimized deployment package (43.75 KB total)
- ✅ **Comprehensive Testing**: Unit, integration, and end-to-end tests
- ✅ **Development Tools**: Hot reloading dev server and debugging tools

### Try It Now

The production deployment is available in the `deployment/` directory:

```bash
# Quick start - use the built-in test server
node test-deployment.js
# Then open http://localhost:8080

# Alternative - serve files directly
cd deployment
python -m http.server 8080
# or
npx serve . -p 8080
```

**Features**: Add, edit, delete, and filter todos with persistent storage, URL routing, and offline functionality - all powered by our custom TodoLang language!

📋 **See [QUICK-START.md](QUICK-START.md) for detailed server instructions**

## TodoLang Language Preview

Here's what TodoLang code looks like:

```todolang
// Data model
model Todo {
id: string
text: string
completed: boolean = false
createdAt: Date = Date.now()
}

// Component definition
component TodoApp {
state {
todos: Todo[] = []
filter: string = "all"
}

render() {


My Todos






}

computed filteredTodos() {
return this.todos.filter(todo => {
if (this.filter == "active") return !todo.completed
if (this.filter == "completed") return todo.completed
return true
})
}

addTodo(text: string) {
this.todos.push(Todo.create(text))
}
}
```

## Architecture Highlights

- **Zero External Dependencies**: Everything built from scratch
- **Custom Language**: Domain-specific syntax optimized for UI development
- **Reactive State**: Automatic UI updates when state changes
- **Virtual DOM**: Efficient rendering with custom diffing algorithm
- **Type System**: Optional typing for better development experience
- **Source Maps**: Debug TodoLang code directly in browser
- **Hot Reloading**: Instant feedback during development

## Testing

The project includes comprehensive testing at multiple levels:

- **Language Tests**: Lexer, parser, and compiler functionality
- **Framework Tests**: State management, virtual DOM, routing
- **Integration Tests**: Build system and project structure
- **E2E Tests**: Complete user workflows (coming soon)

Run tests with:
```bash
node test-runner.js --type integration
```

## Build System

The custom build system:

1. **Compiles** TodoLang files to JavaScript
2. **Bundles** framework and runtime components
3. **Generates** HTML template with proper script loading
4. **Creates** development and production builds
5. **Supports** source maps and minification

## Development Server

The development server provides:

- **Static File Serving**: Serves compiled application
- **Hot Reloading**: Automatic rebuilds on file changes
- **Error Handling**: Graceful error pages
- **SPA Support**: Client-side routing support

Start with:
```bash
node dev-server.js --port 3000
```

## Contributing

This is an hobby project demonstrating extreme over-engineering. Each component is built from scratch to show how modern web frameworks work under the hood.

## License

MIT License - Feel free to learn from this over-engineered masterpiece!