Overview
The frontend is built with Vue.js 3 using the Composition API, providing a modern, reactive user interface for managing social organization activities, members, and projects.Technology Stack
Core Framework
UI & Styling
Build Tools
Application Entry Point
The application initializes insrc/main.ts:
Key Setup Steps
- Import global styles
- Create Vue application instance
- Initialize Pinia for state management
- Configure Vue Router
- Mount application to DOM
Vue Router Configuration
Located insrc/router/index.ts, the router handles all navigation and route protection.
Route Definitions
Navigation Guard
The router implements authentication and authorization checks:Route Protection Logic
-
Landing Page (
/):- Public access allowed
- Authenticated admins redirected to dashboard
-
Protected Routes (all others):
- Require authentication
- Require admin role (
monitor,admin, oradministrador) - Non-authenticated users redirected to landing
- Non-admin users restricted to landing
Pinia State Management
SociApp uses Pinia stores for centralized state management. Each store handles a specific domain.Authentication Store
Location:src/stores/auth.js
Store Architecture Pattern
All stores follow this pattern:Available Stores
- auth.js: Authentication & user session
- users.js: User management
- projects.js: Project management
- activities.js: Activity management
- configuracion.js: Application configuration
- notification.js: Toast notifications
Component Structure
SociApp uses the Composition API for all components.Root Component (App.vue)
Component Categories
Modal Components
- LoginModal.vue: User authentication
- RegisterModal.vue: New user registration
- VerificationModal.vue: Email verification
- ModalForm.vue: Generic form modal
- ModalEdit.vue: Edit entity modal
- ModalDelete.vue: Delete confirmation modal
- MailModal.vue: Email composition
- ActivityModal.vue: Activity details
UI Components
- Menu.vue: Navigation sidebar
- Title.vue: Page titles
- PrimaryButton.vue: Action buttons
- ToggleSwitch.vue: Toggle inputs
- SearchInput.vue: Search fields
- StatisticsCard.vue: Metric cards
- Chart.vue: Data visualizations
- DataDisplay.vue: Table/list views
- ExpandableListItem.vue: Collapsible items
- ActionButtons.vue: CRUD action buttons
Utility Components
- NotificationHost.vue: Toast notification system
- PdfPreview.vue: PDF document viewer
Composition API Patterns
Reactive State
Lifecycle Hooks
Store Integration
Styling Approach
Tailwind CSS Configuration
SociApp uses Tailwind CSS 4.1.18 for utility-first styling.Global Styles
Located insrc/assets/:
- main.css: Base styles and CSS variables
- modals.css: Modal component styles
- configuracion.css: Configuration page styles
CSS Variables
Scoped Styles in Components
Responsive Design
The application is fully responsive with mobile-first breakpoints:HTTP Client Configuration
Axios is configured with interceptors and default settings.API Setup (src/api.js)
Making API Calls
Build Process
Vite Configuration
Development Server
Production Build
Build Output
Vite outputs optimized bundles:- Code splitting: Automatic route-based chunks
- Tree shaking: Removes unused code
- Minification: Compressed JavaScript and CSS
- Asset optimization: Images and fonts
- Source maps: For debugging production issues
Development Workflow
Creating a New Feature
- Create route in
src/router/index.ts - Create view component in
src/views/ - Create Pinia store if needed in
src/stores/ - Create child components in
src/components/ - Add navigation in Menu.vue
- Test authentication and authorization
Component Communication
Testing
Unit Testing Setup
Running Tests
Performance Best Practices
- Lazy Load Routes: Use dynamic imports for route components
- Computed Properties: Cache expensive calculations
- v-show vs v-if: Use v-show for frequently toggled elements
- Key Attributes: Always use :key in v-for loops
- Debounce Input: Debounce search inputs to reduce API calls
- Code Splitting: Split large components into smaller chunks
- Asset Optimization: Compress images and fonts
Debugging Tools
Vue DevTools
- Component inspector
- Pinia store state viewer
- Route navigation tracker
- Performance profiler
