Advanced system to test employee resilience against social engineering attacks
Features โข Installation โข Documentation โข Architecture
- Overview
- Key Features
- Tech Stack
- Quick Start
- Configuration
- Usage
- Architecture
- API Reference
- Workflow
- Security
- Roadmap
- Contributing
- License
- Authors
Fortify is an enterprise platform for simulating phishing and smishing attacks in a controlled environment, designed to increase cybersecurity awareness among corporate employees.
- 91% of security breaches start with a phishing email
- Companies lose millions annually to social engineering attacks
- Traditional training is ineffective and not personalized
Fortify uses advanced AI (Llama 70B) and OSINT (LinkedIn scraping) to:
- ๐ Analyze public employee profiles
- ๐ค Generate ultra-personalized phishing messages
- ๐ Measure real staff vulnerability
- ๐ Provide targeted training based on results
- 6 pre-built campaign types (password reset, CEO fraud, invoice, etc.)
- Personalized messages using Nebius AI (Llama 3.3 70B)
- Tone and language analysis for maximum credibility
- Automatic adaptation to target's role and seniority
- Automated LinkedIn scraping with Puppeteer + Stealth
- Data extraction: experiences, skills, recent posts
- Complete versioning with profile change history
- Intelligent rate limiting to avoid detection
- Complete isolation between organizations
- 3 roles: Admin, Company Admin, Analyst
- Granular permissions with RBAC
- Dedicated dashboard for each company
- Real-time tracking: email sent, clicked, submitted
- Advanced metrics: Click-through rate, Submission rate
- Vulnerability heatmap by department
- Exportable PDF reports (coming soon)
- Soft delete with full retention
- Audit logging of all operations
- Encryption at rest for sensitive data
- GDPR compliant (public data only)
- Nuxt 4 - Full-stack Vue framework
- NuxtUI - Apple-style design system
- Tailwind CSS - Utility-first styling
- Nuxt Server API - Serverless RESTful API
- Better Auth - Modern authentication system
- Drizzle ORM - Type-safe database toolkit
- PostgreSQL - Relational database
- Nebius AI - Llama 3.3 70B Instruct
- Puppeteer - Browser automation
- Puppeteer Extra Stealth - Anti-detection
- pnpm - Fast package manager
- Drizzle Kit - Database migrations
- TypeScript - End-to-end type safety
node >= 18.x
pnpm >= 10.x
postgresql >= 14.x# 1. Clone the repository
git clone <repository-url>
cd Fortify
# 2. Install dependencies
pnpm install
# 3. Configure environment
cp .env.example .env
# Edit .env with your credentials
# 4. Setup database
pnpm db:generate
pnpm db:migrate
# 5. Create admin user
pnpm setup:admin
# 6. Start development server
pnpm devOpen http://localhost:3000 ๐
Create a .env file in the root:
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/fortify
# Better Auth
BETTER_AUTH_SECRET=your-super-secret-key-min-32-chars
BETTER_AUTH_URL=http://localhost:3000
# Nebius AI
NEBIUS_API_KEY=your-nebius-api-key
# App
NODE_ENV=development
PORT=3000- Go to studio.nebius.ai
- Create an account
- Navigate to API Keys
- Generate new key for Llama 3.3 70B
- Copy the key to your
.envfile
POST /api/organizations
Content-Type: application/json
{
"nome": "Acme Corporation",
"email": "admin@acmecorp.com"
}POST /api/targets
Content-Type: application/json
{
"nome": "John Doe",
"email": "john.doe@acmecorp.com",
"posizione": "Senior Developer",
"dipartimento": "Engineering",
"linkedinUrl": "https://linkedin.com/in/johndoe"
}POST /api/scraping/linkedin
Content-Type: application/json
{
"targetId": "target-uuid",
"profileUrl": "https://linkedin.com/in/johndoe"
}POST /api/campaigns
Content-Type: application/json
{
"nome": "Q1 2025 Security Awareness",
"targetIds": ["uuid1", "uuid2", "uuid3"],
"campaignType": "password_reset",
"descrizione": "Baseline awareness test for engineering team"
}AI will automatically generate personalized messages for each target!
POST /api/campaigns/{campaignId}/launchGET /api/campaigns/{campaignId}organization โโฌโ> user (role, organizationId)
โโ> employee_target
โโ> phishing_campaign โ> campaign_target โ> interaction_log
employee_target โ> social_profile โ> scraping_history (versioning)
server/
โโโ api/
โ โโโ organizations/ # Organization CRUD (admin)
โ โโโ targets/ # Employee targets CRUD
โ โโโ scraping/ # LinkedIn scraping
โ โโโ profiles/ # Social profiles data
โ โโโ campaigns/ # Phishing campaigns
โโโ db/
โ โโโ schema.ts # Drizzle schema
โโโ utils/
โโโ auth.ts # Better Auth config
โโโ db.ts # Database client
โโโ rbac.ts # Access control
โโโ scraper/ # Puppeteer scrapers
โ โโโ base.ts # Base classes
โ โโโ linkedin.ts # LinkedIn scraper
โโโ ai/
โโโ nebius.ts # AI integration
graph LR
A[Company Admin] --> B[Create Target]
B --> C[LinkedIn Scraping]
C --> D[Scraping History DB]
D --> E[Create Campaign]
E --> F[Nebius AI]
F --> G[Personalized Messages]
G --> H[Launch Campaign]
H --> I[Track Interactions]
I --> J[Analytics Dashboard]
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/api/organizations |
POST | Admin | Create organization |
/api/organizations |
GET | Admin | List organizations |
/api/organizations/:id |
GET | Admin/Own | Organization details |
/api/organizations/:id |
PATCH | Admin | Update organization |
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/api/targets |
POST | Company Admin | Create target |
/api/targets |
GET | Company Admin | List targets |
/api/targets/:id |
GET | Company Admin | Target details |
/api/targets/:id |
PATCH | Company Admin | Update target |
/api/targets/:id |
DELETE | Company Admin | Delete target (soft) |
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/api/scraping/linkedin |
POST | Company Admin | Start scraping |
/api/scraping/history/:targetId |
GET | Company Admin | Scraping history |
/api/profiles/:profileId/latest |
GET | Company Admin | Latest data |
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/api/campaigns |
POST | Company Admin | Create campaign |
/api/campaigns |
GET | Company Admin | List campaigns |
/api/campaigns/:id |
GET | Company Admin | Campaign details |
/api/campaigns/:id |
PATCH | Company Admin | Update campaign |
/api/campaigns/:id/launch |
POST | Company Admin | Launch campaign |
# 1. Login as Company Admin
POST /api/auth/sign-in/email
{"email": "admin@acme.com", "password": "****"}
# 2. Add 5 developers as targets
POST /api/targets ร 5
# Include LinkedIn URL for each
# 3. Automatic profile scraping
POST /api/scraping/linkedin ร 5
# Wait for completion (30-60s per profile)
# 4. Create "Password Reset" campaign
POST /api/campaigns
{
"nome": "Engineering Team - Password Test",
"targetIds": ["dev1", "dev2", "dev3", "dev4", "dev5"],
"campaignType": "password_reset"
}
# AI generates 5 personalized messages
# 5. Review messages (optional)
GET /api/campaigns/{id}
# Verify generated messages
# 6. Launch campaign
POST /api/campaigns/{id}/launch
# Simulate immediate email sending
# 7. Monitor real-time results
GET /api/campaigns/{id}
# See who clicked, who submitted credentials
# 8. Analyze metrics
# Click rate: 60% (3/5)
# Submit rate: 40% (2/5)
# โ 2 developers need urgent training!โ
Only publicly available data (LinkedIn)
โ
No passwords or real credentials saved
โ
Soft delete with retention policy
โ
Client company consent (contract)
โ
Optional results anonymization
- Use HTTPS in production
- Rotate BETTER_AUTH_SECRET regularly
- Rate limiting on public APIs
- Daily database backups
- Audit logging for sensitive operations
Fortify is an educational tool. Authorized use only:
- โ With explicit organization consent
- โ For training and awareness purposes
- โ In controlled and authorized environments
- โ NOT for real or illegal attacks
- Complete database schema
- Full RESTful API
- LinkedIn scraper with Puppeteer
- Nebius AI integration
- Campaign system
- Multi-tenancy + RBAC
- Admin dashboard with NuxtUI
- Organization management UI
- Target management interface
- Campaign builder wizard
- Real-time analytics charts
- PDF report generator
- Real email sending (SendGrid/AWS SES)
- SMS phishing (Twilio)
- Custom template editor
- Machine learning risk scoring
- Webhook notifications
- Public API for integrations
Contributions welcome! Please:
- Fork the repository
- Create a branch:
git checkout -b feature/amazing-feature - Commit:
git commit -m 'Add amazing feature' - Push:
git push origin feature/amazing-feature - Open a Pull Request
- โ TypeScript strict mode
- โ ESLint + Prettier
- โ Conventional Commits
- โ Test coverage > 80% (future)
This project is developed for educational and research purposes within the university context.
ยฉ 2025 University - Fortify Project
![]() Mattia Guariglia @mattyx97 ๐ป ๐จ ๐ฌ |
![]() Giuseppe Cerella @cerella17 ๐ป ๐ ๐ |
๐ป Code ยท ๐จ Design ยท ๐ Documentation ยท ๐ฌ Research ยท ๐ Data Analysis
- Nuxt Team - Amazing framework
- Nebius AI - Llama 70B access
- Drizzle Team - Best ORM ever
- Better Auth - Modern auth solution
- Puppeteer Team - Automation magic
Built with โค๏ธ to make the web safer

