מעקף היא קהילת קוד פתוח ישראלית המקדמת פרויקטים של תוכנה חופשית. Maakaf is an Israeli open source community promoting free software projects.
This is the official website for the Maakaf community. It's built using Hugo with the Docsy theme, providing a comprehensive platform for our community's documentation, blog posts, and project information.
To run this website locally, you'll need:
- Hugo Extended (version 0.146.0 or higher)
- Go (for Hugo modules)
- Node.js and npm (for SCSS processing)
- Clone the repository:
git clone https://github.com/Maakaf/maakaf_home.git
cd maakaf_home- Install dependencies:
npm install- Run the development server:
hugo serverThe site will be available at http://localhost:1313
- 💬 WhatsApp Community: Join our WhatsApp groups
- 📰 News Updates: Join our announcements group
- 🎮 Discord: Join our Discord server
- 📺 YouTube: @maakaf-os
- 🌐 GitHub: Maakaf Organization
- 🤝 Meetup: Join our meetups
The site includes a full mentorship web app at /he/mentorship/. It is backed by a separate Express + Firebase API — see mentors_backend.
| URL | Description |
|---|---|
/he/mentorship/ |
Home: program description, mentor directory with search/filter |
/he/mentorship/register/ |
Register as mentor or mentee |
/he/mentorship/login/ |
Sign in |
/he/mentorship/mentor-dashboard/ |
Mentor: view and respond to incoming requests |
/he/mentorship/mentee-dashboard/ |
Mentee: view sent requests, cancel, complete, reply |
/he/mentorship/request/ |
Send a mentorship request to a specific mentor |
/he/mentorship/profile/ |
Edit mentor or mentee profile |
/he/mentorship/admin/ |
Admin dashboard: stats, full requests table, mentor and mentee lists |
| File | Purpose |
|---|---|
api.js |
apiFetch, authedFetch, session helpers (reads window.MENTORSHIP_API_BASE) |
auth-bar.js |
Injects the beta notice + auth bar (greeting, dashboard link, bell, logout) on every mentorship page |
notifications.js |
Bell icon with dropdown, 30s polling, deep-links to specific request cards |
mentorship-home.js |
Hides guest CTA when logged in |
directory.js |
Mentor directory: renders cards with avatar initials, search/filter |
register.js |
Mentor/mentee registration with OTP email verification (code input card, resend, change email) |
login.js |
Sign-in, OTP verification card for unverified users, OTP-based password reset (code + new password on site) |
mentor-dashboard.js |
Mentor: request cards with actions, mentee profile toggle, conversation history |
dashboard.js |
Mentee: request cards, reply on needs_info, cancel/complete, conversation history |
request.js |
Submit a mentorship request |
profile.js |
Edit mentor or mentee profile |
admin.js |
Admin dashboard: login, stat cards, requests table with stale-alert, mentors/mentees tabs |
errors.js |
Hebrew error message map |
toast.js |
Toast notification helper |
The session (ID token, refresh token, role, name) is stored in localStorage under the key
mentorship.session. It persists across tabs, windows, and browser restarts until the user
explicitly logs out. All session access goes through getSession() / saveSession() /
clearSession() in api.js.
| Practice | Where |
|---|---|
All user content passed through escapeHtml() before DOM insertion |
utils.js, all dashboard/request modules |
Error messages use textContent, never innerHTML |
profile.js, toast.js |
Redirects use dashboardUrl() helper — no hardcoded paths |
profile.js, register.js, auth-bar.js |
| OTP/password credentials wiped from memory only on success | register.js, login.js |
| Resend failures surface an error to the user | register.js, login.js |
STATUS_LABELS and formatDate defined once in utils.js, imported everywhere |
utils.js → admin.js, dashboards |
Mentorship-specific styles live in assets/scss/_styles_project.scss. Key class families:
| Prefix | Used for |
|---|---|
.ms-auth-bar, .ms-page-header, .ms-avatar, .ms-role-card, .ms-form-section |
Shared mentorship UI components |
.ms-page-title |
Mentorship home page heading |
.admin-stat, .admin-panel, .admin-filter-bar, .admin-auth-card, .admin-table |
Admin dashboard components |
The body_class: "no-sidebar" front matter (cascaded from content/he/mentorship/_index.md)
hides the Docsy docs sidebars and constrains content width on all mentorship pages.
window.MENTORSHIP_API_BASE is injected by layouts/partials/hooks/head-end.html
from params.mentorshipApiBase in hugo.yaml. Set this to the backend URL for each environment.
We welcome contributions from the community! Whether it's:
- Adding new documentation
- Fixing typos or improving existing content
- Translating content
- Suggesting improvements
- Join the website channel in our Discord server
Please feel free to open an issue or submit a pull request.
This project is built on top of Docsy, which is licensed under the Apache License 2.0. Our content and modifications are available under the same terms.