A comprehensive, full-stack IT Asset Management System built with Django REST Framework and React.
- β Asset Management: Track hardware, software, and IT equipment
- β Category Management: Organize assets by categories (Laptops, Desktops, Servers, etc.)
- β Vendor Management: Manage manufacturers and suppliers
- β Location Tracking: Track physical locations of assets
- β User Assignment: Assign assets to employees
- β Status Tracking: Monitor asset lifecycle (Available, Assigned, Maintenance, Retired)
- β Maintenance Records: Log maintenance activities and schedule preventive maintenance
- β Asset History: Complete audit trail of all asset changes
- β Software License Management: Track licenses, seats, and expiration dates
- β Dashboard: Real-time statistics and insights
- β Search & Filter: Powerful search capabilities across all assets
- β JWT Authentication: Secure API access with token-based authentication
- RESTful API architecture
- Responsive web interface
- Token-based authentication
- Role-based access control ready
- Database migrations
- Admin interface
- Comprehensive filtering and search
- Pagination support
- Cross-origin resource sharing (CORS) enabled
- Python 3.12+
- Django 5.0 - Web framework
- Django REST Framework - RESTful API
- SQLite - Database (easily switchable to PostgreSQL/MySQL)
- JWT Authentication - Secure token-based auth
- React 18 - UI framework
- Vite - Build tool
- Axios - HTTP client
- Modern CSS - Responsive design
- Python 3.12+
- Node.js 20+
- pip (Python package manager)
- npm (Node package manager)- Navigate to backend directory
cd backend- Install Python dependencies
pip3 install -r requirements.txt- Run database migrations
python3 manage.py makemigrations
python3 manage.py migrate- Create superuser (admin account)
python3 manage.py createsuperuser
# Follow prompts to create admin user
# Suggested: username: admin, password: admin (for testing)- Load initial data (optional)
python3 manage.py shellThen in the Python shell:
from assets.models import Category, Vendor, Location
from django.contrib.auth.models import User
# Create categories
Category.objects.create(name="Laptop", description="Portable computers")
Category.objects.create(name="Desktop", description="Desktop computers")
Category.objects.create(name="Server", description="Server hardware")
Category.objects.create(name="Network Equipment", description="Routers, switches, etc.")
Category.objects.create(name="Monitor", description="Display screens")
# Create vendors
Vendor.objects.create(name="Dell", website="https://dell.com", contact_email="[email protected]")
Vendor.objects.create(name="HP", website="https://hp.com", contact_email="[email protected]")
Vendor.objects.create(name="Lenovo", website="https://lenovo.com", contact_email="[email protected]")
Vendor.objects.create(name="Cisco", website="https://cisco.com", contact_email="[email protected]")
# Create locations
Location.objects.create(name="Headquarters", building="Main Building", floor="1", address="123 Main St")
Location.objects.create(name="Data Center", building="DC-1", floor="B1", address="456 Tech Blvd")
Location.objects.create(name="Branch Office", building="Branch-1", floor="2", address="789 Office Park")
print("Initial data created successfully!")
exit()- Start the development server
python3 manage.py runserverBackend will be available at: http://localhost:8000
Admin interface: http://localhost:8000/admin
- Navigate to frontend directory
cd frontend- Install dependencies
npm install- Start the development server
npm run devFrontend will be available at: http://localhost:3000
After creating the superuser, use those credentials:
- Username: admin (or what you created)
- Password: admin (or what you created)
POST /api/token/- Obtain JWT tokenPOST /api/token/refresh/- Refresh JWT token
GET /api/assets/items/- List all assetsPOST /api/assets/items/- Create new assetGET /api/assets/items/{id}/- Get asset detailsPUT /api/assets/items/{id}/- Update assetDELETE /api/assets/items/{id}/- Delete assetGET /api/assets/items/dashboard_stats/- Dashboard statisticsPOST /api/assets/items/{id}/assign/- Assign asset to userPOST /api/assets/items/{id}/unassign/- Unassign asset
GET /api/assets/categories/- List categoriesPOST /api/assets/categories/- Create category
GET /api/assets/vendors/- List vendorsPOST /api/assets/vendors/- Create vendor
GET /api/assets/locations/- List locationsPOST /api/assets/locations/- Create location
GET /api/assets/maintenance/- List maintenance recordsPOST /api/assets/maintenance/- Create maintenance record
GET /api/assets/licenses/- List licensesPOST /api/assets/licenses/- Create licenseGET /api/assets/licenses/expiring_soon/- Licenses expiring in 90 days
GET /api/users/- List usersPOST /api/users/- Create userGET /api/users/me/- Current user detailsGET /api/users/{id}/assets/- User's assigned assets
Asset
- Basic info: asset_tag, name, description
- Hardware: manufacturer, model, serial_number
- Financial: purchase_date, purchase_cost, warranty_expiry
- Status: status, assigned_to, location
- Lifecycle: deployment_date, retirement_date
Category - Asset categories Vendor - Manufacturers and suppliers Location - Physical locations MaintenanceRecord - Maintenance history AssetHistory - Audit trail SoftwareLicense - License management
frontend/
βββ src/
β βββ components/
β β βββ Header.jsx
β βββ pages/
β β βββ Login.jsx
β β βββ Dashboard.jsx
β β βββ Assets.jsx
β βββ services/
β β βββ api.js
β βββ App.jsx
β βββ main.jsx
β βββ index.css
βββ index.html
βββ vite.config.js
βββ package.json
- Database settings
- CORS configuration
- JWT token expiration
- API pagination settings
- API proxy configuration
- Development server port
The system supports both SQLite (default) and PostgreSQL:
For SQLite (Development):
# Default - no configuration needed
python3 manage.py migrateFor PostgreSQL (Production - Recommended):
# Set environment variables
export DB_ENGINE=django.db.backends.postgresql
export DB_NAME=it_asset_db
export DB_USER=your_db_user
export DB_PASSWORD=your_secure_password
export DB_HOST=localhost
export DB_PORT=5432
# Run migrations
python3 manage.py migrate- Set
DEBUG = Falsein settings.py - Configure production database (PostgreSQL recommended)
- Set secure
SECRET_KEYusing environment variables - Configure static files:
python3 manage.py collectstatic - Use production WSGI server (Gunicorn, uWSGI)
- Set up proper ALLOWED_HOSTS
- Build for production:
npm run build - Serve the
distfolder with web server (Nginx, Apache) - Update API URL in production environment
- Change default SECRET_KEY in production
- Use environment variables for sensitive data
- Enable HTTPS in production
- Configure proper CORS settings
- Implement rate limiting
- Regular security updates
- QR code/barcode scanning
- Asset depreciation calculator
- Email notifications for warranty expiration
- Advanced reporting and analytics
- File attachments for assets
- Mobile app
- Integration with Active Directory/LDAP
- Bulk import/export (CSV, Excel)
- Advanced role-based permissions
- Multi-tenant support
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Open a pull request
This project is open source and available under the MIT License.
+256742020610 [email protected]
For issues, questions, or contributions, please open an issue on the repository.
Built with Django, React, and modern web technologies for enterprise IT asset management.