Jeffrey Bernadas
Software Engineer
I build enterprise-grade and responsive digital solutions for the web and mobile.
Back to Projects








Minifi









Description
Minifi is a full-stack URL shortener platform designed with enterprise-grade features. It offers tiered access (Guest, Free, Pro) with features like custom aliases, password protection, link scheduling, click limits, and QR code generation. The platform includes comprehensive analytics with geo heat maps, device tracking, and UTM parameters. Pro users get access to real-time chat support with WebSocket messaging. The backend follows a dual-process architecture with a main API server and a dedicated worker for background jobs, cron tasks, and email delivery. Authentication is handled via Keycloak with social logins and a custom-themed login page built with Keycloakify.
Features
URL Shortening
- -Guest shortener with 5 links/day and 3-day retention
- -Custom aliases for Pro users
- -Password-protected links with secure access
- -Link scheduling with automatic activation
- -Click limits and one-time links
- -QR code generation for all links
Analytics & Tracking
- -Click tracking with detailed statistics
- -Geographic heat maps with country/city data
- -Device, browser, and OS breakdown
- -Referrer tracking and unique visitors
- -UTM parameter support
- -Click log history for Pro users
Dashboard & Tags
- -Link management with stats cards
- -Search, filters, and pagination
- -Archive and unarchive links
- -Custom tag colors (background + text)
- -Bulk tagging and filter by tags
Real-time Chat
- -Socket.IO WebSocket with Redis adapter
- -Typing indicators and read receipts
- -Message editing and deletion
- -Infinite scroll message history
- -Presence detection (online/offline status)
Admin Panel
- -Platform statistics with 30-day trends
- -User management and blocking
- -Link moderation with security alerts
- -System advisories (Info/Warning/Maintenance/Critical)
- -Scheduled advisory publishing with expiration
Authentication
- -Keycloak SSO with PKCE flow
- -4 social logins (GitHub, Google, LinkedIn, Twitter)
- -Keycloakify-themed login pages
- -Role-based access control (User/Admin)
- -Silent token refresh
- -User sync-on-demand pattern
- -BlockedUserGuard for banned accounts
Email Notifications
- -9 email templates built with React Email + Resend
- -Welcome email for new users
- -PRO upgrade and subscription cancellation notices
- -Security threat alerts for malicious links
- -Link expiring warnings (3 days before)
- -FREE tier link deletion warnings (7 days before)
- -Monthly usage reports (PRO and FREE versions)
- -Chat unread message digest
Scheduled Jobs (Cron)
- -8 automated cron jobs (Philippine Time)
- -Activate scheduled links (every hour)
- -Disable expired links (every hour)
- -Delete expired guest links (daily 3 AM)
- -Delete old FREE tier links (daily 3 AM)
- -Send FREE link deletion warnings (daily 9 AM)
- -Send expiring link notifications (daily 9 AM)
- -Send monthly reports (1st of month 9 AM)
- -Send chat unread digest (daily 8 PM)
Background Jobs
- -RabbitMQ message queues with retry logic
- -EmailConsumer for email.send queue
- -ScanConsumer for scan.url queue (AI security)
- -Dual-process architecture (Main App + Worker)
Subscriptions & Billing
- -Stripe Checkout integration
- -FREE and PRO tier management
- -Billing portal access
- -Usage limits enforcement (25 links for FREE)
- -Webhook handling for subscription events
- -Cancel at period end support
Security
- -AI-powered URL scanning (OpenAI GPT-4o-mini)
- -Malicious link detection and warnings
- -Helmet security headers
- -Password-protected link access
Logging & Monitoring
- -Winston structured logging
- -Elasticsearch log aggregation
- -Kibana dashboards for visualization
- -Elastic APM for distributed tracing
- -Sentry for error tracking
- -Health check endpoints
Caching & Rate Limiting
- -Redis caching with invalidation strategies
- -Global and per-endpoint rate limiting
- -Redis-backed throttle storage
API & Architecture
- -61 RESTful API endpoints
- -Versioned API (/v1)
- -Swagger/OpenAPI documentation
- -Standardized response format with interceptors
- -Custom application error handling
- -Offset-based and cursor-based pagination
User Experience
- -Dark/Light/Auto theme modes with persistence
- -Avatar upload via MinIO S3-compatible storage
- -Profile management (phone, address)
- -Email notification toggles in settings
- -Plan comparison view
Tech Stack
Frontend
- React 19
- Vite 7
- TypeScript
- Redux Toolkit
- RTK Query
- React Router 7
- Mantine 8
- Socket.IO Client
- Keycloak JS
- Recharts
- react-simple-maps
- React Hook Form
- Zod
- dayjs
- Biome
- Vitest
Backend
- NestJS
- TypeScript
- PostgreSQL
- Prisma
- Redis
- RabbitMQ
- Socket.IO
Infrastructure
- MinIO
- Keycloak
- Keycloakify
- Elasticsearch
- Kibana
Monitoring & Logging
- Winston
- Elastic APM
- Sentry
External Services
- Stripe
- Resend
- OpenAI
- React Email