{"id":16589938,"url":"https://github.com/rlch/tutero-assignment","last_synced_at":"2025-10-27T01:02:08.835Z","repository":{"id":131912626,"uuid":"605386929","full_name":"rlch/tutero-assignment","owner":"rlch","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-23T06:05:44.000Z","size":385,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-06T12:31:13.140Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rlch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-23T03:25:04.000Z","updated_at":"2024-07-23T06:05:48.000Z","dependencies_parsed_at":"2024-11-16T06:36:10.639Z","dependency_job_id":"7da8749b-53f7-44ee-a1d4-6f822ff1e8c6","html_url":"https://github.com/rlch/tutero-assignment","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/rlch/tutero-assignment","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlch%2Ftutero-assignment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlch%2Ftutero-assignment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlch%2Ftutero-assignment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlch%2Ftutero-assignment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rlch","download_url":"https://codeload.github.com/rlch/tutero-assignment/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlch%2Ftutero-assignment/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263468483,"owners_count":23471291,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T23:10:30.040Z","updated_at":"2025-10-27T01:02:08.825Z","avatar_url":"https://github.com/rlch.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Circuit Builder Assignment\n\n## Overview\n\nIn this assignment, you will build an interactive web application for creating and simulating digital logic circuits. You will implement circuit creation using logic gates, enable reusable components, and develop circuit evaluation functionality.\n\nThe API provides AND, OR, and NOT gates as primitives. Complex gates (like NAND, XOR) can be built by compositing circuits from these basic gates.\n\n**NAND Gate Circuit:**\n\n```mermaid\n---\ntitle: NAND\n---\nflowchart LR\n    A[Input A] --\u003e AND1[AND Gate]\n    B[Input B] --\u003e AND1\n    AND1 --\u003e NOT1[NOT Gate]\n    NOT1 --\u003e Output[NAND Output]\n```\n\n**XOR Using NAND Component:**\n\n```mermaid\n---\ntitle: XOR Built with NAND Component\n---\nflowchart LR\n    X[Input X] --\u003e OR1[OR Gate]\n    Y[Input Y] --\u003e OR1\n    X --\u003e NAND1[NAND Gate]\n    Y --\u003e NAND1\n    OR1 --\u003e AND2[AND Gate]\n    NAND1 --\u003e AND2\n    AND2 --\u003e Final[XOR Output]\n```\n\n_Project skeleton and boilerplate provided. Core implementation to be completed by developer._\n\n\u003e [!IMPORTANT]\n\u003e **Getting Started:** Use this repository as a template to create your own assignment repository before beginning development.\n\n## Quick Start\n\n### Prerequisites\n\n- Go 1.21+, Flutter 3.8.1+\n- Task runner: [Installation guide](https://taskfile.dev/installation/)\n\n### Setup\n\n```bash\n# Backend\ncd backend \u0026\u0026 task dev  # :8080\n\n# Frontend\ncd frontend \u0026\u0026 task dev  # Opens in Chrome\n```\n\n## Assignment Requirements\n\n### Core Features to Implement\n\n\u003e [!WARNING]\n\u003e **Backend Requirements:**\n\u003e \n\u003e 1. **Circuit Evaluation Engine** - Boolean logic evaluation algorithm\n\u003e 2. **Service Layer Implementation** - Implement business logic in provided service interfaces\n\u003e 3. **Database Integration** - Add persistence layer\n\u003e 4. **GraphQL Resolvers** - Complete resolver implementations for all schema operations\n\u003e 5. **Validation \u0026 Error Handling** - Circuit validation and proper error responses\n\n\u003e [!WARNING]\n\u003e **Frontend Requirements:**\n\u003e \n\u003e 1. **Circuit Editor UI** - Canvas-based drag-and-drop interface (primary challenge)\n\u003e 2. **Component Palette** - Draggable logic gates (AND, OR, NOT) and I/O nodes\n\u003e 3. **GraphQL Integration** - Wire up mutations for circuit creation/editing\n\u003e 4. **Circuit Visualization** - Real-time circuit display and connection visualization\n\u003e 5. **Circuit Simulation** - Interface for inputting values and displaying outputs\n\n**Optional Enhancements:**\n\n- **Circuits in Component Palette** - Save and reuse circuits as custom components\n- **Signal Flow Visualization** - Animate input-to-output data flow through circuit\n- **Comprehensive Test Suite** - Unit/integration tests for both frontend and backend\n- **Auto-Layout Algorithms** - Automatic circuit arrangement (force-directed, hierarchical, etc.)\n- **Undo/Redo System** - Full action history with state management\n- **Creative Extensions** - Any additional features that demonstrate your technical skills\n\n## Implementation Approach\n\n**Backend Choice:**\n\n- **Recommended**: Use provided Go GraphQL skeleton for rapid development\n- **Alternative**: Implement with your preferred backend language/transport layer\n\n**Frontend Requirement:**\nFlutter web frontend is required. The provided skeleton includes Ferry GraphQL client setup.\n\n\u003e [!IMPORTANT]\n\u003e **Implementation Guidelines:**\n\u003e \n\u003e - **Use Standard Libraries** - Prefer built-in language features and standard libraries over external dependencies\n\u003e - **Showcase Your Skills** - Avoid third-party packages that would solve core challenges (circuit evaluation, UI interactions)\n\u003e - **Flutter Widgets** - Leverage advanced widgets like `CustomPainter`, `MultiChildRenderObject` for custom UI\n\u003e - **Dependencies Only for Infrastructure** - External packages acceptable for database drivers, HTTP clients, basic utilities\n\n## Submission\n\n- Create a template from this repository\n- Version control your assignment on **GitHub**\n- Give access to [@rlch](https://github.com/rlch)\n- Send repository link, time taken, and brief video overview to: `sonny@tutero.com.au`, `richard@tutero.com.au`\n\n## Documentation\n\n- [backend/README.md](backend/README.md) - Backend development guide\n- [frontend/README.md](frontend/README.md) - Frontend development guide\n\n## References\n\n- [Logic Gates](https://en.wikipedia.org/wiki/Logic_gate) - Boolean logic fundamentals\n- [gqlgen Documentation](https://gqlgen.com/) - GraphQL server generation\n- [GraphQL Specification](https://spec.graphql.org/) - API standard\n- [Ferry GraphQL Client](https://ferrygraphql.com/) - Flutter GraphQL client\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frlch%2Ftutero-assignment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frlch%2Ftutero-assignment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frlch%2Ftutero-assignment/lists"}