An internship management platform that digitalizes the whole university internship process — from finding an opportunity to receiving the approved official letter and insurance document.
Applying for an internship at a university usually means printing forms, chasing signatures between the department coordinator and the career center, and sending countless e-mails to find out what happened to your paperwork.
Internify replaces that paper trail with a single web application. Students upload their documents, the internship coordinator of their department reviews them, and the career center completes the process by issuing the SGK insurance document — every step tracked, with in-app messaging and status updates instead of e-mail ping-pong.
The project is a Django application with three role-based dashboards (student, internship coordinator, career center employee), a built-in messaging system, an internship opportunity board, and automatic official-letter generation from a Word template.
- Internship application form — upload the internship form and transcript, then follow the status of every application (
Waiting → Pending → Accepted / Rejected). - Official letter requests — request the official internship letter by submitting a transcript; download the generated PDF once the coordinator approves it.
- Internship opportunities — browse internship postings filtered by your own faculty, with company logo, city, dates and a direct application link.
- Insurance document — download the SGK document uploaded by the career center right from the application page.
- Application review — inspect submitted documents in an embedded PDF viewer and approve (forward to the career center) or reject applications from your department.
- Official letter approval — approve a request and Internify renders the official letter from the institutional Word template and delivers it as a PDF, filled in with the student's name, faculty, department, date and internship number.
- Rejection with feedback — every rejection sends an explanatory message to the student's inbox.
- SGK entry declaration — review coordinator-approved applications, upload the insurance document and finalize the application.
- Opportunity management — publish new internship postings (company, position, city, logo, dates, target faculty, application URL) to the opportunity board.
- Threaded inbox — send and reply to messages, with unread badges in the sidebar.
- Announcements — the latest announcements are shown on the home page.
- Profile — view your academic details and update your profile photo.
- Dark mode & collapsible sidebar — both preferences are remembered in
localStorage. - Separate student / staff login — e-mail-based authentication with Django groups (
Student,Coordinator,Staff) deciding what each user can see. - Admin panel — all faculties, departments, classrooms, users and applications are manageable from the Django admin.
flowchart LR
A[Student<br/>uploads form + transcript] --> B{Internship<br/>Coordinator}
B -- Reject --> R[Rejected<br/>+ message to student]
B -- Approve --> C{Career Center}
C -- Reject --> R
C -- Approve + insurance --> D[Accepted<br/>SGK document available]
E[Student<br/>requests official letter] --> F{Internship<br/>Coordinator}
F -- Reject --> R
F -- Approve --> G[Letter generated<br/>from Word template as PDF]
| Layer | Technology |
|---|---|
| Backend | Django 4.2, Python 3.9+ |
| Database | SQLite |
| Frontend | Django Templates, Bootstrap 5.3, Boxicons, Font Awesome, Poppins |
| Forms | django-crispy-forms + crispy-bootstrap5 |
| Documents | docxtpl, python-docx, docxcompose, docx2pdf |
| Config | django-environ, Pillow |
Internify/
├── Internify/ # Project settings, URLs, WSGI/ASGI
├── management/ # Main app: models, views, URLs, forms, admin
│ ├── models.py # User, Student, Coordinator, Application, Document, Message, Internship ...
│ ├── views.py # Role-based views for every page
│ ├── middleware.py # Login-required middleware + CSP header
│ └── create_doc.py # Official letter generation (docx → PDF)
├── templates/ # Layout, sidebar and per-role pages
│ ├── student/ # Application form, official letter, opportunities
│ ├── teacher/ # Coordinator screens
│ └── careercenter/ # SGK entry declaration
├── static/assets/ # CSS, JS, images and sample documents
├── uploads/ # User uploads (photos, logos, application files)
├── letter.docx # Official letter Word template
└── manage.py
- Python 3.9 or newer
- pip
git clone https://github.com/emirsakal/Internify.git
cd Internify
pip install -r requirements.txtThe project reads its settings from an .env file in the Internify/ folder. This file is not tracked by Git — create it from the provided template:
cp Internify/.env.example Internify/.envThen generate a secret key of your own and write it into the file:
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"SECRET_KEY=your-secret-key
DEBUG=True
ALLOWED_HOSTS=127.0.0.1,localhostpython manage.py migrate
python manage.py runserverThen open localhost:8000 or http://127.0.0.1:8000 in your browser.
The repository ships with a populated db.sqlite3, so you can log in with the demo accounts below right away. To create your own administrator, run python manage.py createsuperuser and manage the data from /admin.
Try the platform with the accounts below — students use the student login page, coordinators and career center employees use the staff login page.
| Role | Password | Login page | |
|---|---|---|---|
| Student | student@hotmail.com | 1234 | /login/ |
| Internship Coordinator | teacher@hotmail.com | 1234 | /login/staff |
| Career Center | careercenter@hotmail.com | 1234 | /login/staff |
- Official letter generation (
management/create_doc.py) converts the Word template to PDF withdocx2pdf, which relies on Microsoft Word throughpywin32— that single feature currently works on Windows only. Everything else runs on any platform. Internify/.envis intentionally kept out of version control; every environment (local, staging, production) needs its own copy with its ownSECRET_KEY.- The bundled SQLite database and the demo credentials exist for demonstration purposes; generate a fresh
SECRET_KEY, turnDEBUGoff and use a production database before deploying.
Login page
Home page
Dark mode
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.


