Intelligent Personal Productivity System with AI-Powered Link Management
Explore the docs »
.
Report Bug
·
Request Feature
Table of Contents
LinkMind is a comprehensive personal productivity system designed to help users organize their digital life through intelligent link management, event scheduling, and note-taking—all powered by artificial intelligence. Built as a full-stack multiplatform solution, it combines a mobile application (iOS & Android), a web admin dashboard, and a robust REST API.
This project was developed as a Technical Thesis (TCC) at Etec Lauro Gomes - Technical Course in Internet Computing (Informática para a Internet), São Bernardo do Campo, SP - Brazil.
LinkMind represents 7 months of intensive development—an average of 10 hours per day dedicated to transforming a vision into reality. What started as a response to a common frustration became a comprehensive solution to modern productivity challenges.
The Problem Identified: The developer observed that most organization apps were unnecessarily complex and difficult to learn. Users struggled with steep learning curves just to perform basic tasks. Additionally, in today's digital landscape, people receive media, tasks, and commitments from multiple applications simultaneously throughout the day—creating information overload and fragmented attention.
The Solution: LinkMind was conceived as a unified hub that centralizes different areas of organization—links, events, and annotations—solving both problems at once. Users can consolidate their digital life in one place while maintaining complete control over their experience.
Core Philosophy: LinkMind puts the user in control. Unlike many apps that push unnecessary content and notifications, LinkMind allows users to create their own scheduled notifications, ensuring they only receive what they explicitly need. No spam, no forced features—just a powerful tool that adapts to the user's needs.
LinkMind provides a unified platform for managing:
- Links: Save, organize, and categorize web links with AI-generated summaries
- Events: Schedule events with automatic push notifications
- Annotations: Create and manage personal notes
- Categories: Organize all content with custom categories
graph TB
Mobile["📱 Mobile\n(Expo/React Native)"]
Web["🌐 Web\n(React/Vite)"]
Mobile --> API
Web --> API
API["⚙️ REST API\n(Express)"]
API --> PG["🗄️ Supabase\n(PostgreSQL + Prisma)"]
API --> Redis["⚡ Redis\n(Session/Cache)"]
API --> Supabase["☁️ Supabase Storage\n(Files)"]
API --> Resend["📧 Resend\n(Email Service)"]
subgraph AWS ["☁️ AWS — Idempotent Notification Flow"]
SQS1["SQS QUEUE 1\n(5 retries + DLQ)"]
Lambda1["LAMBDA receive-worker\n(schedule event)"]
EB["EVENT BRIDGE Scheduler\n(triggers at event time)"]
SQS2["SQS QUEUE 2\n(5 retries + DLQ)"]
Lambda2["LAMBDA send-worker\n(send notification)"]
SQS1 --> Lambda1
Lambda1 --> EB
EB --> SQS2
SQS2 --> Lambda2
end
API --> SQS1
Lambda2 --> Push["🔔 Expo Push\nNotifications"]
subgraph AI ["🤖 AI Link Summarization Flow"]
Jina["Jina AI\n(web scraping)"]
Groq["Groq API\n(Llama 3.3 summarization)"]
SaveSummary["☁️ Supabase Storage\n(save summary)"]
Jina --> Groq
Groq --> SaveSummary
end
API -->|"link URL"| Jina
SaveSummary -->|"summary"| API
API -->|"returns summary"| Mobile
| Register | Login | Password Recovery |
|---|
| Home/Listing | Create | View |
|---|---|---|
![]() |
![]() |
![]() |
| Action Options | Edit (No Modal) | Edit (With Modal) |
|---|---|---|
![]() |
![]() |
![]() |
| AI Summary (Loading) | AI Summary (Result) |
|---|---|
![]() |
![]() |
| Listing | Create (Keyboard Open) | Create (Keyboard Closed) |
|---|---|---|
![]() |
![]() |
![]() |
Note: Annotations feature automatic saving. When a user opens an annotation for editing and makes any changes, the content is automatically saved when they navigate using the native navigation bar or the app's back arrow. All interactions that create, edit, or delete content display toast notifications (success, error, or validation warnings).
| Listing | Create - Step 1 | Create - Step 2 |
|---|
| Create - Step 3 | View | Action Options |
|---|
| Edit | Create Notification |
|---|
During the development of LinkMind, a robust multiplatform system with multiple interconnected services, thorough testing and debugging were essential to ensure reliability and performance.
- Insomnia - Primary API client for endpoint testing and request debugging
- Postman - Alternative API testing and collection management
- Browser DevTools - Network inspection, performance profiling, and frontend debugging
Building a system that integrates mobile app, web dashboard, REST API, AWS Lambda functions, PostgreSQL, Redis, and external services like Supabase and Expo Push Notifications presents debugging challenges that go far beyond simple endpoint testing.
Network Debugging Complexity: The system involves multiple asynchronous communication channels:
- Mobile app → REST API → PostgreSQL/Redis
- REST API → AWS SQS → Lambda Functions → Expo Push Notifications
- Web Dashboard → REST API → User Management
Identifying which service failed in a chain of async operations required tracing requests across the entire stack. A 500 error from the API could originate from database connection issues, Redis cache failures, malformed SQS messages, Lambda execution timeouts, or external service timeouts—not just from the endpoint logic itself.
Debugging Beyond Surface Errors: This project required investigating root causes at multiple levels:
- Database query performance and connection pool exhaustion
- Redis session persistence and cache invalidation issues
- AWS Lambda cold starts and function configuration
- SQS message formatting and queue visibility timeouts
- Cross-origin request (CORS) configurations
- Token refresh race conditions between mobile and web platforms
The developer had to build custom logging strategies, analyze CloudWatch metrics, and instrument code to trace the exact failure point in distributed systems—skills that transcend typical CRUD application debugging.
Before you begin, ensure you have the following installed:
- Node.js: Version 18.0 or higher
- pnpm: Version 8.0 or higher (recommended package manager)
- PostgreSQL: Version 14 or higher
- Redis: Version 6 or higher
- Git: For version control
git clone https://github.com/ScatmanVit/Link-Mind.git
cd Link-Mindcd server
pnpm installConfigure your .env file (copy from existing .env or create with required variables):
# Database
DATABASE_URL="postgresql://user:password@localhost:5432/linkmind"
# JWT
JWT_SECRET="your-secret-key"
# Redis
REDIS_URL="redis://localhost:6379"
# Groq AI
GROQ_API_KEY="your-groq-api-key"
# Supabase
SUPABASE_URL="your-supabase-url"
SUPABASE_ANON_PUBLIC="your-supabase-anon-key"
# Resend (Email)
RESEND_API_KEY="your-resend-api-key"
# AWS
AWS_REGION="us-east-1"
RECEIVE_SQS_URL="your-sqs-queue-url"
# Frontend URL
FRONT_END_URL="http://localhost:5173"Run database migrations:
npx prisma migrate devStart the development server:
pnpm devThe API will be available at http://localhost:3000
cd app/link-mind
pnpm install
pnpm startRun on Android:
pnpm androidRun on iOS:
pnpm ioscd web
pnpm install
pnpm devThe web app will be available at http://localhost:5173
link-mind/
├── .github/ # GitHub assets and configs
│ └── logo.png
├── app/ # Mobile application (Expo/React Native)
│ └── link-mind/
│ ├── app/ # Expo Router pages
│ │ ├── auth/ # Authentication screens
│ │ ├── tabs/ # Main app tabs (links, events, annotations)
│ │ └── pesquisa/ # Search functionality
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── context/ # React Context (auth)
│ │ ├── services/ # API services
│ │ ├── styles/ # Theme and colors
│ │ └── utils/ # Utility functions
│ └── assets/ # Images, fonts, etc.
├── server/ # Backend API
│ ├── config/ # Configuration (app, redis, supabase)
│ ├── controllers/ # Route controllers
│ │ ├── auth/ # Authentication controllers
│ │ └── private/ # Private user/admin controllers
│ ├── routes/ # API routes
│ ├── services/ # Business logic
│ │ ├── auth/ # Auth services
│ │ ├── aws/ # AWS SQS services
│ │ └── private/ # User services
│ ├── middlewares/ # Express middlewares (auth, admin)
│ ├── prisma/ # Database schema
│ └── server.js # Entry point
├── web/ # Web application (Admin Dashboard)
│ ├── src/
│ │ ├── auth/ # Auth pages
│ │ ├── components/ # React components
│ │ ├── context/ # Auth context
│ │ ├── pages/ # Page components
│ │ ├── services/ # API services (admin)
│ │ └── styles/ # CSS/styles
│ └── main.tsx # Entry point
├── aws/ # AWS Lambda functions
│ └── events-notifications/
│ └── lambdas/
│ ├── receive-worker/ # Event scheduling (EventBridge)
│ └── send-worker/ # Push notifications
└── README.md
All API endpoints are prefixed with /api/v1/linkmind
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/cadastro |
Register new user |
| POST | /auth/login |
User login |
| POST | /auth/refresh-token |
Refresh access token |
| POST | /auth/logout |
User logout |
| POST | /auth/reset-password |
Reset password |
| POST | /auth/reset-password-send |
Send password reset email |
| Method | Endpoint | Description |
|---|---|---|
| GET | /links/list |
Get all user links |
| POST | /link/create |
Create new link |
| PUT | /link/update/:id |
Update link |
| POST | /link/delete/:id |
Delete link |
| POST | /summary/link |
Generate AI summary for link |
| Method | Endpoint | Description |
|---|---|---|
| GET | /event/list |
Get all user events |
| POST | /event/create |
Create new event |
| PUT | /event/update/:id |
Update event |
| DELETE | /event/delete/:id |
Delete event |
| POST | /event/notification/:id |
Schedule notification |
| Method | Endpoint | Description |
|---|---|---|
| GET | /annotation/list |
Get all annotations |
| POST | /annotation/create |
Create new annotation |
| PUT | /annotation/update/:id |
Update annotation |
| DELETE | /annotation/delete/:id |
Delete annotation |
| Method | Endpoint | Description |
|---|---|---|
| GET | /categories/list |
Get all categories |
| POST | /category/create |
Create new category |
| Method | Endpoint | Description |
|---|---|---|
| POST | /user/device-token |
Register Expo push token |
| Method | Endpoint | Description |
|---|---|---|
| GET | /admin/list-users |
List all users (paginated) |
| POST | /admin/create-user |
Create new user |
| PUT | /admin/update-user/:id |
Update user |
| DELETE | /admin/delete-user/:id |
Delete user |
| POST | /admin/send-email-comunicate |
Send email to user |
The LinkMind mobile app provides a native experience on iOS and Android:
- Authentication: Register and login with email/password
- Links Tab: Add new links, view AI-generated summaries
- Events Tab: Create events with date/time and notifications
- Annotations Tab: Write and manage personal notes
- Quick Add: Floating action button for quick content creation
The web application serves as an admin panel:
- Login at
http://localhost:5173 - Manage users (create, edit, delete)
- Send email communications to users
- Pagination support for user list
// Register
const response = await fetch('/api/v1/linkmind/auth/cadastro', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: 'John Doe',
email: 'john@example.com',
password: 'securepassword'
})
});
// Login
const loginResponse = await fetch('/api/v1/linkmind/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'john@example.com',
password: 'securepassword',
platform: 'mobile'
})
});
const { access_token } = await loginResponse.json();
// Create Link
const linkResponse = await fetch('/api/v1/linkmind/link/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${access_token}`
},
body: JSON.stringify({
title: 'Example Link',
link: 'https://example.com',
categoriaId: 'category-uuid'
})
});
// Generate AI Summary
const summaryResponse = await fetch('/api/v1/linkmind/summary/link', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${access_token}`
},
body: JSON.stringify({
linkId: 'link-uuid',
instructions: "Make it concise"
})
});- User Authentication: Register, login, logout, password reset with JWT
- Secure Token Management: HTTP-only cookies for refresh tokens (web) + Redis cache for session handling
- Link Management: Full CRUD with categories and tags
- AI-Powered Summarization: Link content summarization using Groq Llama 3.3
- Event Scheduling: Create events with date/time and notifications
- Push Notifications: Real-time notifications via Expo Push Notifications with AWS SQS + DLQ for retry
- AWS Integration: EventBridge scheduling, SQS queue processing, and Dead Letter Queue for failed messages
- Annotation System: Personal notes with categories
- Category System: Custom categories for all content types
- Admin Dashboard: Web-based admin panel for user management
- Email Notifications: Password reset and admin communications via Resend
- Real-time sync across devices
- Advanced search with filters
- Offline mode for mobile app
- User authentication system
- Link management with CRUD operations
- AI-powered link summarization (Groq Llama 3.3)
- Event creation and management
- Push notification system (Expo + AWS)
- Category and tag system
- Personal annotations
- Mobile application (iOS/Android)
- Web admin dashboard
- Offline mode for mobile app
- Link bookmarking with read-later functionality
- Collaboration features (share links/events)
- Browser extension for quick link saving
- Advanced AI analytics dashboard
- Dark/Light theme toggle
- Multi-language support
- PWA support for web app
See the open issues for a full list of proposed features and known issues.
Distributed under the MIT License. See LICENSE for more information.
Victor Ribeiro Baradel: My Linkedin
Application: My application repository
Developed as a Technical Thesis (TCC) at Etec Lauro Gomes - Technical Course in Internet Computing (Informática para a Internet) - São Bernardo do Campo, SP - Brazil
7 months of development | 10 hours per day | Full-stack multiplatform solution






















