# irani-ewu/trello_project_management_system_c architecture

> Architecture diagram of the GitHub repository irani-ewu/trello_project_management_system_c, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/irani-ewu/trello_project_management_system_c
- Repository: https://github.com/irani-ewu/trello_project_management_system_c

## Overview

1. This repository is a small, single-process C application that models a Trello-style project management system for a data structures course. The architecture is centered on in-memory linked lists rather than files, databases, or network services.

2. The system is split into a few clear modules:
- `main.c` as the program entry and top-level coordinator
- `user_entry.c/.h` for user interaction and command/input handling
- `cards.c/.h` for card/task-related behavior
- `search.c/.h` for lookup and retrieval operations
- `lists.c` for the linked-list container logic and list management

3. The core data model is likely built around linked-list nodes representing project entities such as lists/columns and cards/tasks. The README explicitly says linked lists are the base data structure, so the main architectural boundary is between the console interaction layer and the in-memory list structures.

4. `main.c` is the orchestration layer. It probably initializes the system state, displays the main menu, and routes user choices into the feature modules. In the diagram, this is the control center that connects input handling to the underlying data structures.

5. `user_entry.c` acts as the presentation/input boundary. Its role is to collect user commands and fields, validate or normalize them, and pass them into the operational modules. This keeps interactive prompting separate from the actual list/card manipulation logic.

6. `cards.c` encapsulates card-level operations. In Trello terms, this is where a task/card is created, updated, moved, displayed, or removed. This module should be treated as the business-logic layer for individual work items.

7. `lists.c` is the main data-structure module. It likely owns the linked-list implementation and the operations that add, remove, traverse, or reorganize project lists/columns and their contained cards. This is the structural backbone of the system.

8. `search.c` provides lookup functionality across the in-memory model. It is the navigation layer that helps find a card/list/user entry by name, ID, or other key, then returns a pointer or reference for the caller to operate on. In an architecture diagram, it connects UI requests to the data structure traversal paths.

9. The header files (`cards.h`, `search.h`, `user_entry.h`) define the public interfaces between modules. They are the contract points that keep each C file focused and reduce coupling between the UI layer, search utilities, and card/list logic.

10. The data flow is straightforward: user input enters through `user_entry`, `main` dispatches the request, the relevant feature module (`cards` or `lists`) mutates the in-memory linked lists, and `search` is used whenever the operation needs to locate an existing entity before updating it. Results are then presented back to the user through the console.

11. There is no evidence of persistence, server communication, or third-party infrastructure in the repository. That means the architecture diagram should show a local CLI application with transient in-memory state, not a client-server or database-backed system.

12. For an accurate diagram, represent the main boundary as:
- Console user
- Input/menu handling
- Operation modules (`cards`, `lists`, `search`)
- Linked-list based in-memory project data
with `main.c` sitting above these modules as the execution coordinator.

Main entry points: [`main.c`](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/main.c) (main.c), [`cards.c`](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/cards.c) (cards.c), [`lists.c`](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/lists.c) (lists.c), [`search.c`](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/search.c) (search.c)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Presentation"]
  node_console_user(("Console user<br/>actor"))
  node_main_c["main.c<br/>entrypoint<br/>[main.c]"]
  node_user_entry_c["user_entry.c<br/>input handler<br/>[user_entry.c]"]
  node_user_entry_h["user_entry.h<br/>interface<br/>[user_entry.h]"]
end

subgraph group_operations["Operations"]
  node_cards_c["cards.c<br/>card logic<br/>[cards.c]"]
  node_cards_h["cards.h<br/>interface<br/>[cards.h]"]
  node_lists_c[("lists.c<br/>list structure<br/>[lists.c]")]
  node_search_c{{"search.c<br/>lookup<br/>[search.c]"}}
  node_search_h["search.h<br/>interface<br/>[search.h]"]
end

subgraph group_data["In-memory Data"]
  node_project_state[("Project state<br/>in-memory model")]
  node_list_nodes(("List nodes"))
  node_card_nodes(("Card nodes"))
end

node_console_user -->|"commands"| node_user_entry_c
node_user_entry_c -->|"dispatch"| node_main_c
node_main_c -->|"route"| node_cards_c
node_main_c -->|"route"| node_lists_c
node_main_c -->|"route"| node_search_c
node_main_c -->|"owns"| node_project_state
node_user_entry_c -.->|"exposes"| node_user_entry_h
node_cards_c -.->|"exposes"| node_cards_h
node_search_c -.->|"exposes"| node_search_h
node_cards_c -->|"finds"| node_search_c
node_lists_c -->|"finds"| node_search_c
node_cards_c -->|"mutates"| node_project_state
node_lists_c -->|"mutates"| node_project_state
node_project_state -->|"contains"| node_list_nodes
node_project_state -->|"contains"| node_card_nodes
node_list_nodes -->|"links"| node_card_nodes
node_cards_c -->|"operates on"| node_card_nodes
node_lists_c -->|"operates on"| node_list_nodes

click node_main_c "https://github.com/irani-ewu/trello_project_management_system_c/blob/main/main.c"
click node_user_entry_c "https://github.com/irani-ewu/trello_project_management_system_c/blob/main/user_entry.c"
click node_user_entry_h "https://github.com/irani-ewu/trello_project_management_system_c/blob/main/user_entry.h"
click node_cards_c "https://github.com/irani-ewu/trello_project_management_system_c/blob/main/cards.c"
click node_cards_h "https://github.com/irani-ewu/trello_project_management_system_c/blob/main/cards.h"
click node_lists_c "https://github.com/irani-ewu/trello_project_management_system_c/blob/main/lists.c"
click node_search_c "https://github.com/irani-ewu/trello_project_management_system_c/blob/main/search.c"
click node_search_h "https://github.com/irani-ewu/trello_project_management_system_c/blob/main/search.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_console_user,node_main_c,node_user_entry_c,node_user_entry_h toneBlue
class node_cards_c,node_cards_h,node_lists_c,node_search_c,node_search_h toneAmber
class node_project_state,node_list_nodes,node_card_nodes toneMint
```

## Components

### Presentation

Console entry and user interaction boundary

- **Console user**: actor · Person interacting with the CLI
- [main.c](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/main.c): entrypoint · Program startup and top-level control flow · `main.c`
- [user_entry.c](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/user_entry.c): input handler · Prompts, reads, and normalizes user commands · `user_entry.c`
- [user_entry.h](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/user_entry.h): interface · Public contract for input handling routines · `user_entry.h`

### Operations

Feature modules that coordinate card, list, and lookup behavior

- [cards.c](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/cards.c): card logic · Create, update, move, display, and remove cards · `cards.c`
- [cards.h](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/cards.h): interface · Public contract for card operations · `cards.h`
- [lists.c](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/lists.c): list structure · Linked-list management for lists and contained cards · `lists.c`
- [search.c](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/search.c): lookup · Finds lists, cards, or other entities in memory · `search.c`
- [search.h](https://github.com/irani-ewu/trello_project_management_system_c/blob/main/search.h): interface · Public contract for search helpers · `search.h`

### In-memory Data

Linked-list based project state

- **Project state**: in-memory model · Transient linked-list representation of the Trello-style system
- **List nodes**: list node · Linked-list elements representing columns or lists
- **Card nodes**: card node · Linked-list elements representing tasks or cards

## Connections

- Console user → user_entry.c: commands · User provides menu choices and fields
- user_entry.c → main.c: dispatch · Collected input is handed to the program coordinator
- main.c → cards.c: route · Main routes card-related actions to the card module
- main.c → lists.c: route · Main routes list-management actions to the list module
- main.c → search.c: route · Main invokes lookup helpers when an operation needs a target
- main.c → Project state: owns · Main coordinates the transient in-memory application state
- user_entry.c → user_entry.h: exposes · Input routines are declared through the header
- cards.c → cards.h: exposes · Card operations are declared through the header
- search.c → search.h: exposes · Search helpers are declared through the header
- cards.c → search.c: finds · Card actions use search to locate existing entities
- lists.c → search.c: finds · List operations use search for traversal and retrieval
- cards.c → Project state: mutates · Card changes update the in-memory model
- lists.c → Project state: mutates · List structure operations update the in-memory model
- Project state → List nodes: contains · The project is built from linked list containers
- Project state → Card nodes: contains · Each list contains card/task nodes
- List nodes → Card nodes: links · List nodes reference contained cards in the chain
- cards.c → Card nodes: operates on · Card logic manipulates card nodes directly
- lists.c → List nodes: operates on · List logic manipulates list nodes directly
