# vainyala/linkedin-app architecture

> Architecture diagram of the GitHub repository vainyala/linkedin-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vainyala/linkedin-app
- Repository: https://github.com/vainyala/linkedin-app

## Overview

#### Purpose and Entry Points
This is a cross-platform Flutter application for creating and presenting a professional profile/portfolio: user profile, experience, education, skills, certifications, projects, and domain portfolios. The Dart application starts at `lib/main.dart`; platform launchers host the Flutter runtime on Android, iOS, desktop, and web.

#### Application Shell and Navigation
The root application in `lib/main.dart` likely establishes the app shell and initial route. Primary top-level experiences are a dashboard, profile presentation, profile editing, and messaging:
- `lib/screens/dashboard_page.dart`
- `lib/screens/profile_view_page.dart`
- `lib/screens/edit_profile_page.dart`
- `lib/screens/MessagePage.dart`

Control flows from shell/navigation into screen-specific read/edit operations, rather than through a separate backend service layer visible in the tree.

#### Profile Domain Model
The app uses explicit Dart models for each profile section. These define the application’s persisted and rendered data boundary:
- `lib/models/user_profile.dart`
- `lib/models/experience.dart`
- `lib/models/education.dart`
- `lib/models/skill.dart`
- `lib/models/certification.dart`
- `lib/models/project.dart`
- `lib/models/domain_portfolio.dart`

A user profile aggregates or relates to these records; management screens operate on individual collections and profile views compose them into a portfolio.

#### Local Persistence Boundary
Database access is centralized under `lib/database`, separating storage representation from UI/model consumers:
- `lib/database/database_helper.dart`
- `lib/database/tables.dart`

`database_helper.dart` is the persistence gateway, while `tables.dart` defines the schema/table-level contract. Screens and profile composition should depend on this boundary rather than platform-specific storage APIs. No remote API, authentication provider, or cloud service is evident from the supplied repository tree.

#### Editing and Management Flows
Dedicated management screens provide CRUD-oriented workflows for portfolio sections:
- `lib/screens/manage_experience_page.dart`
- `lib/screens/manage_education_page.dart`
- `lib/screens/manage_skills_page.dart`
- `lib/screens/manage_certifications_page.dart`
- `lib/screens/manage_projects_page.dart`
- `lib/screens/domain_portfolio_page.dart`

The expected flow is: dashboard/profile navigation → edit or manage section → model creation/update → local database helper → refreshed profile/dashboard presentation.

#### Presentation Composition
Reusable widgets isolate rendering for common profile sections and summary elements:
- `lib/widgets/profile_header_widget.dart`
- `lib/widgets/experience_card.dart`
- `lib/widgets/education_card.dart`
- `lib/widgets/certification_card.dart`
- `lib/widgets/project_card.dart`
- `lib/widgets/domain_selector_widget.dart`
- `lib/widgets/stat_widget.dart`

These form the UI composition boundary: screen pages coordinate data and interaction, while cards/header/selector render domain-specific fragments. Shared display constants are located in `lib/utils/constants.dart`.

#### Runtime and Platform Infrastructure
Flutter/Dart is the shared application runtime. Native host projects package and launch it for Android, iOS, Linux, macOS, Windows, and web:
- Android: `android/app/src/main/kotlin/com/example/linked_in/MainActivity.kt`
- iOS: `ios/Runner/AppDelegate.swift`
- macOS: `macos/Runner/MainFlutterWindow.swift`
- Linux: `linux/runner/main.cc`
- Windows: `windows/runner/main.cpp`
- Web: `web/index.html`

Platform directories are generated/host infrastructure; application behavior is concentrated in `lib/`.

Main entry points: [`lib/screens/profile_view_page.dart`](https://github.com/vainyala/linkedin-app/blob/main/lib/screens/profile_view_page.dart) (Profile Presentation), [`lib/screens/edit_profile_page.dart`](https://github.com/vainyala/linkedin-app/blob/main/lib/screens/edit_profile_page.dart) (Profile Editor), [`lib/main.dart`](https://github.com/vainyala/linkedin-app/blob/main/lib/main.dart) (App Shell), [`lib/database/database_helper.dart`](https://github.com/vainyala/linkedin-app/blob/main/lib/database/database_helper.dart) (Database Gateway)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Flutter Application"]
  node_main{{"App Shell<br/>Flutter entry point<br/>[main.dart]"}}
  node_dashboard["Dashboard<br/>screen"]
  node_profile_view["Profile Presentation<br/>screen"]
  node_edit_profile["Profile Editor<br/>screen"]
  node_messaging["Messaging<br/>screen<br/>[MessagePage.dart]"]
  node_section_managers["Section Managers<br/>CRUD screens"]
  node_domain_portfolio["Domain Portfolio Manager<br/>CRUD screen"]
  node_profile_widgets["Profile Header<br/>widget"]
  node_section_widgets["Section Cards &amp; Selector<br/>widgets"]
end

subgraph group_data["Profile Data"]
  node_user_profile["User Profile<br/>domain model<br/>[user_profile.dart]"]
  node_profile_sections["Profile Section Records<br/>domain models"]
  node_database_helper[("Database Gateway<br/>local persistence")]
  node_database_schema["Table Schema<br/>storage contract<br/>[tables.dart]"]
end

subgraph group_runtime["Runtime Hosts"]
  node_flutter_runtime{{"Flutter/Dart Runtime<br/>shared runtime"}}
  node_platform_hosts["Native &amp; Web Hosts<br/>platform launchers"]
end

node_platform_hosts -->|"launches"| node_flutter_runtime
node_flutter_runtime -->|"runs"| node_main
node_main -->|"navigates"| node_dashboard
node_main -->|"navigates"| node_profile_view
node_main -->|"navigates"| node_edit_profile
node_main -->|"navigates"| node_messaging
node_dashboard -->|"opens"| node_profile_view
node_dashboard -->|"opens"| node_edit_profile
node_edit_profile -->|"manages sections"| node_section_managers
node_edit_profile -->|"manages"| node_domain_portfolio
node_profile_view -->|"composes"| node_profile_widgets
node_profile_view -->|"composes"| node_section_widgets
node_profile_view -->|"renders"| node_user_profile
node_section_managers -->|"creates and updates"| node_profile_sections
node_domain_portfolio -->|"creates and updates"| node_profile_sections
node_edit_profile -->|"updates"| node_user_profile
node_user_profile -->|"aggregates"| node_profile_sections
node_edit_profile -->|"persists through"| node_database_helper
node_section_managers -->|"persists through"| node_database_helper
node_profile_view -->|"loads through"| node_database_helper
node_database_helper -->|"uses"| node_database_schema

click node_main "https://github.com/vainyala/linkedin-app/blob/main/lib/main.dart"
click node_dashboard "https://github.com/vainyala/linkedin-app/blob/main/lib/screens/dashboard_page.dart"
click node_profile_view "https://github.com/vainyala/linkedin-app/blob/main/lib/screens/profile_view_page.dart"
click node_edit_profile "https://github.com/vainyala/linkedin-app/blob/main/lib/screens/edit_profile_page.dart"
click node_messaging "https://github.com/vainyala/linkedin-app/blob/main/lib/screens/MessagePage.dart"
click node_domain_portfolio "https://github.com/vainyala/linkedin-app/blob/main/lib/screens/domain_portfolio_page.dart"
click node_profile_widgets "https://github.com/vainyala/linkedin-app/blob/main/lib/widgets/profile_header_widget.dart"
click node_user_profile "https://github.com/vainyala/linkedin-app/blob/main/lib/models/user_profile.dart"
click node_database_helper "https://github.com/vainyala/linkedin-app/blob/main/lib/database/database_helper.dart"
click node_database_schema "https://github.com/vainyala/linkedin-app/blob/main/lib/database/tables.dart"

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_main,node_dashboard,node_profile_view,node_edit_profile,node_messaging,node_section_managers,node_domain_portfolio,node_profile_widgets,node_section_widgets toneBlue
class node_user_profile,node_profile_sections,node_database_helper,node_database_schema toneAmber
class node_flutter_runtime,node_platform_hosts toneMint
```

## Components

### Flutter Application

- [App Shell](https://github.com/vainyala/linkedin-app/blob/main/lib/main.dart): Flutter entry point · Establishes the application shell and initial navigation. · `lib/main.dart`
- [Dashboard](https://github.com/vainyala/linkedin-app/blob/main/lib/screens/dashboard_page.dart): screen · `lib/screens/dashboard_page.dart`
- [Profile Presentation](https://github.com/vainyala/linkedin-app/blob/main/lib/screens/profile_view_page.dart): screen · Composes the portfolio for viewing. · `lib/screens/profile_view_page.dart`
- [Profile Editor](https://github.com/vainyala/linkedin-app/blob/main/lib/screens/edit_profile_page.dart): screen · `lib/screens/edit_profile_page.dart`
- [Messaging](https://github.com/vainyala/linkedin-app/blob/main/lib/screens/MessagePage.dart): screen · `lib/screens/MessagePage.dart`
- **Section Managers**: CRUD screens · Manage experience, education, skills, certifications, and projects.
- [Domain Portfolio Manager](https://github.com/vainyala/linkedin-app/blob/main/lib/screens/domain_portfolio_page.dart): CRUD screen · `lib/screens/domain_portfolio_page.dart`
- [Profile Header](https://github.com/vainyala/linkedin-app/blob/main/lib/widgets/profile_header_widget.dart): widget · `lib/widgets/profile_header_widget.dart`
- **Section Cards & Selector**: widgets · Reusable portfolio cards, domain selector, and statistics display.

### Profile Data

- [User Profile](https://github.com/vainyala/linkedin-app/blob/main/lib/models/user_profile.dart): domain model · Aggregate profile record and presentation boundary. · `lib/models/user_profile.dart`
- **Profile Section Records**: domain models · Experience, education, skill, certification, project, and domain portfolio records.
- [Database Gateway](https://github.com/vainyala/linkedin-app/blob/main/lib/database/database_helper.dart): local persistence · Centralizes local database reads and writes. · `lib/database/database_helper.dart`
- [Table Schema](https://github.com/vainyala/linkedin-app/blob/main/lib/database/tables.dart): storage contract · `lib/database/tables.dart`

### Runtime Hosts

- **Flutter/Dart Runtime**: shared runtime · Runs the Dart application across supported platforms.
- **Native & Web Hosts**: platform launchers · Android, iOS, desktop, and web hosts package and launch Flutter.

## Connections

- Native & Web Hosts → Flutter/Dart Runtime: launches
- Flutter/Dart Runtime → App Shell: runs
- App Shell → Dashboard: navigates
- App Shell → Profile Presentation: navigates
- App Shell → Profile Editor: navigates
- App Shell → Messaging: navigates
- Dashboard → Profile Presentation: opens
- Dashboard → Profile Editor: opens
- Profile Editor → Section Managers: manages sections
- Profile Editor → Domain Portfolio Manager: manages
- Profile Presentation → Profile Header: composes
- Profile Presentation → Section Cards & Selector: composes
- Profile Presentation → User Profile: renders
- Section Managers → Profile Section Records: creates and updates
- Domain Portfolio Manager → Profile Section Records: creates and updates
- Profile Editor → User Profile: updates
- User Profile → Profile Section Records: aggregates
- Profile Editor → Database Gateway: persists through
- Section Managers → Database Gateway: persists through
- Profile Presentation → Database Gateway: loads through
- Database Gateway → Table Schema: uses
