Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
419518c
style: redesign base CSS with design tokens and mobile-first layout
ViggiXDevp Apr 5, 2026
a69fae0
style: redesign base CSS with design tokens and mobile-first layout
ViggiXDevp Apr 5, 2026
11c1439
feat: add responsive layout and collapsible mobile filter sidebar
ViggiXDevp Apr 5, 2026
c593b1c
feat: add React form validation and password toggle to login
ViggiXDevp Apr 5, 2026
b2ea495
feat: replace form.as_table with styled fields and password strength
ViggiXDevp Apr 5, 2026
5050c1c
feat: replace table with React card grid and live search filter
ViggiXDevp Apr 5, 2026
9e789e1
style: improve workshop details with card layout and back nav
ViggiXDevp Apr 5, 2026
961677c
style: improve propose form layout and mobile responsiveness
ViggiXDevp Apr 5, 2026
244618c
feat: add React tab interface for accepted and proposed workshops
ViggiXDevp Apr 5, 2026
12dfeba
style: redesign profile page with card layout and edit form grid
ViggiXDevp Apr 5, 2026
c39a487
docs: rewrite README with setup instructions and design reasoning
ViggiXDevp Apr 5, 2026
5f931b5
feat: add React CDN, Google Fonts, SEO meta, improved navbar
ViggiXDevp Apr 5, 2026
58d5c70
feat: add .gitignore to exclude logs, build artifacts, and editor files
ViggiXDevp Apr 10, 2026
8cc06a3
feat: add ESLint configuration for JavaScript and JSX files
ViggiXDevp Apr 10, 2026
1b59706
feat: add initial HTML structure for the workshop booking application
ViggiXDevp Apr 10, 2026
47f3765
Implement feature X to enhance user experience and fix bug Y in module Z
ViggiXDevp Apr 10, 2026
59cf541
feat: add package.json for workshop frontend setup with dependencies …
ViggiXDevp Apr 10, 2026
87fb086
feat: add workshop proposal, registration, statistics, and workshop t…
ViggiXDevp Apr 10, 2026
bcec500
feat: add README.md with project overview, tech stack, and setup inst…
ViggiXDevp Apr 10, 2026
997a138
feat: add Tailwind CSS configuration for styling the workshop booking…
ViggiXDevp Apr 10, 2026
edca429
feat: add Vite configuration for React setup in workshop frontend
ViggiXDevp Apr 10, 2026
834c076
feat: add favicon.svg for the workshop booking application
ViggiXDevp Apr 10, 2026
835960c
feat: add SVG icons for the workshop booking application
ViggiXDevp Apr 10, 2026
12f037a
feat: add App.css for styling the workshop booking application
ViggiXDevp Apr 10, 2026
668c078
feat: implement main application structure with routing and layout
ViggiXDevp Apr 10, 2026
529f45a
feat: add index.css for styling the workshop booking application
ViggiXDevp Apr 10, 2026
53c06f6
feat: add main entry point for the workshop booking application
ViggiXDevp Apr 10, 2026
7257bcf
feat: add mock data for workshops, users, and statistics
ViggiXDevp Apr 10, 2026
b83832c
feat: add React logo SVG asset
ViggiXDevp Apr 10, 2026
b29e278
feat: add Vite logo SVG asset
ViggiXDevp Apr 10, 2026
ff838ae
feat: add Layout component for application structure
ViggiXDevp Apr 10, 2026
b0bd4b1
feat: add Navbar component for navigation and user menu
ViggiXDevp Apr 10, 2026
4d87242
feat: implement Home page with quick access cards and recent workshops
ViggiXDevp Apr 10, 2026
c1f1fb6
feat: add Login page with form validation and error handling
ViggiXDevp Apr 10, 2026
61d4ca0
feat: add My Workshops page to display accepted and proposed workshops
ViggiXDevp Apr 10, 2026
e64cbfe
feat: add Profile page with user details and editing functionality
ViggiXDevp Apr 10, 2026
91f957b
feat: add Propose Workshop page with form validation and terms accept…
ViggiXDevp Apr 10, 2026
d2ae4a6
feat: add Registration page with form validation and password strengt…
ViggiXDevp Apr 10, 2026
19504e8
feat: add Statistics page with filtering, pagination, and data visual…
ViggiXDevp Apr 10, 2026
12642da
feat: add Workshop Type Detail page with dynamic content and user act…
ViggiXDevp Apr 10, 2026
c560bbe
feat: add Workshop Type List page with search and pagination function…
ViggiXDevp Apr 10, 2026
47922ba
feat: enhance README with comprehensive UI/UX redesign details and pr…
ViggiXDevp Apr 10, 2026
acb928a
Add files via upload
ViggiXDevp Apr 10, 2026
faa4356
Change image links in README to GitHub URLs
ViggiXDevp Apr 10, 2026
5113f3b
Change image references to GitHub links
ViggiXDevp Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
330 changes: 315 additions & 15 deletions README.md

Large diffs are not rendered by default.

471 changes: 372 additions & 99 deletions statistics_app/templates/statistics_app/workshop_public_stats.html

Large diffs are not rendered by default.

563 changes: 549 additions & 14 deletions workshop_app/static/workshop_app/css/base.css

Large diffs are not rendered by default.

255 changes: 154 additions & 101 deletions workshop_app/templates/workshop_app/base.html
Original file line number Diff line number Diff line change
@@ -1,135 +1,188 @@
<!DOCTYPE html>
<html>
<html lang="en">
{% load static %}
{% load custom_filters %}
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
{% block title %}
HomePage
{% endblock %}
</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#0f172a">
<meta name="description" content="FOSSEE Workshop Booking — Book and manage Python workshops by IIT Bombay">
<meta name="robots" content="index, follow">
<!-- Open Graph -->
<meta property="og:site_name" content="FOSSEE Workshops">
<meta property="og:type" content="website">
<meta property="og:description" content="Book and manage Python workshops by IIT Bombay's FOSSEE group.">

<script src="{% static 'workshop_app/js/jquery-3.4.1.min.js' %}"></script>
<script src="{% static 'workshop_app/js/bootstrap.min.js' %}"></script>
<script src="{% static 'workshop_app/js/popper.min.js' %}"></script>
<script src="{% static 'workshop_app/js/toastr.min.js' %}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<title>{% block title %}FOSSEE Workshops{% endblock %} | FOSSEE IIT Bombay</title>

<!-- Preconnect for performance -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

{% block extra-dependencies %}
{% endblock %}
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

<!-- Stylesheets -->
<link rel="stylesheet" href="{% static 'workshop_app/css/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'workshop_app/css/toastr.min.css' %}">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="{% static 'workshop_app/css/base.css' %}" type="text/css"/>
<link rel="stylesheet" href="{% static 'workshop_app/css/font-awesome.css' %}" type="text/css"/>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css">
<link rel="stylesheet" href="{% static 'workshop_app/css/base.css' %}" type="text/css"/>

{% block extra-custom-scripts %}
{% endblock %}
{% block extra-custom-scripts %}{% endblock %}

<!-- React via CDN -->
<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>

<!-- JS dependencies -->
<script src="{% static 'workshop_app/js/jquery-3.4.1.min.js' %}"></script>
<script src="{% static 'workshop_app/js/popper.min.js' %}"></script>
<script src="{% static 'workshop_app/js/bootstrap.min.js' %}"></script>
<script src="{% static 'workshop_app/js/toastr.min.js' %}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css">

{% block extra-dependencies %}{% endblock %}
</head>

<body>

<!-- ===== NAVBAR ===== -->
{% block header %}
<nav class="navbar navbar-dark navbar-expand-lg bg-dark fixed-top">
<nav class="navbar navbar-dark navbar-expand-lg fixed-top" role="navigation" aria-label="Main navigation">

{% if user.is_authenticated %}
<a class="navbar-brand" href="{% url 'workshop_app:index' %}" aria-label="FOSSEE Workshops Home">
FOSSEE Workshops
</a>
{% else %}
<a class="navbar-brand" href="{{ request.scheme }}://{{ request.get_host }}" aria-label="FOSSEE Workshops Home">
FOSSEE Workshops
</a>
{% endif %}

<button class="navbar-toggler" type="button"
data-toggle="collapse" data-target="#mainNav"
aria-controls="mainNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>

<div class="collapse navbar-collapse" id="mainNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="/">
<i class="fa fa-home" aria-hidden="true"></i>&nbsp;Home
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'statistics_app:public' %}">
<i class="fa fa-bar-chart" aria-hidden="true"></i>&nbsp;Statistics
</a>
</li>
</ul>

{% if user.is_authenticated %}
<a class="navbar-brand text-white" href="{% url 'workshop_app:index' %}">FOSSEE Workshops</a>
{% else %}
<a class="navbar-brand text-white" href="{{request.scheme}}://{{request.get_host}}">FOSSEE Workshops</a>
{% endif %}
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link text-white" href="/">
Home
</a>
</li>
<li class="nav-item">
<a class="nav-link text-white" href="{% url 'statistics_app:public' %}">
Workshop Statistics
</a>
</li>
</ul>
{% if user.is_authenticated %}
<ul class="navbar-nav mr-auto">
{% if request.user|has_group:"instructor" %}
<li class="nav-item">
<a class="nav-link text-white" href="{% url 'statistics_app:team' %}">
Team Statistics
<ul class="navbar-nav mr-auto">
{% if request.user|has_group:"instructor" %}
<li class="nav-item">
<a class="nav-link" href="{% url 'statistics_app:team' %}">
<i class="fa fa-users" aria-hidden="true"></i>&nbsp;Team Stats
</a>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link" href="{% url 'workshop_app:workshop_status_instructor' %}">
<i class="fa fa-tasks" aria-hidden="true"></i>&nbsp;Workshop Status
</a>
</li>
{% if not request.user|has_group:"instructor" %}
<li class="nav-item">
<a class="nav-link" href="{% url 'workshop_app:propose_workshop' %}">
<i class="fa fa-plus-circle" aria-hidden="true"></i>&nbsp;Propose Workshop
</a>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link" href="{% url 'workshop_app:workshop_type_list' %}">
<i class="fa fa-list" aria-hidden="true"></i>&nbsp;Workshop Types
</a>
</li>
</ul>

<ul class="navbar-nav" style="margin-left:auto;">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="userMenuBtn"
role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<span class="material-icons" style="vertical-align:middle;font-size:1.1rem">account_circle</span>
&nbsp;{{ user.get_full_name|title }}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="userMenuBtn">
<a class="dropdown-item" href="{% url 'workshop_app:view_own_profile' %}">
<i class="fa fa-user"></i>&nbsp;Profile
</a>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link text-white" href="{% url 'workshop_app:workshop_status_instructor' %}">
Workshop Status
<a class="dropdown-item" href="{% url 'password_change' %}">
<i class="fa fa-lock"></i>&nbsp;Change Password
</a>
</li>
{% if not request.user|has_group:"instructor" %}
<li class="nav-item">
<a class="nav-link text-white" href="{% url 'workshop_app:propose_workshop' %}">
Propose Workshop
</a>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link text-white" href="{% url 'workshop_app:workshop_type_list' %}">
Workshop Types
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="{% url 'workshop_app:logout' %}">
<i class="fa fa-sign-out"></i>&nbsp;Logout
</a>
</li>
</ul>
<div class="my-2 my-lg-0">
<ul class="navbar-nav mr-auto">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle text-white" href="#" id="navbarDropdown" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="material-icons" style="vertical-align: middle">account_circle</span>
<p style="display: inline; vertical-align: middle">
{{user.get_full_name|title}}
</p>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{% url 'workshop_app:view_own_profile' %}">Profile</a>
<a class="dropdown-item" href="{% url 'password_change' %}">
Change Password
</a>
<a class="dropdown-item" href="{% url 'workshop_app:logout' %}">Logout</a>
</div>
</li>
</ul>
</div>
{% endif %}
</div>
</nav>
</div>
</li>
</ul>
{% else %}
<ul class="navbar-nav" style="margin-left:auto;">
<li class="nav-item">
<a class="nav-link" href="{% url 'workshop_app:login' %}">
<i class="fa fa-sign-in"></i>&nbsp;Login
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'workshop_app:register' %}">
<i class="fa fa-user-plus"></i>&nbsp;Register
</a>
</li>
</ul>
{% endif %}
</div>
</nav>
{% endblock %}

<div class="base-content">
<!-- ===== MAIN CONTENT ===== -->
<main class="base-content" id="main-content">
{% block content %}
<h1>Base Template Content. Please override me</h1>
<p>Base Template. Please override.</p>
{% endblock %}
</div>
</main>

<!-- ===== FOOTER ===== -->
<footer class="footer" role="contentinfo">
{% block footer %}
<div>
Developed by <a href="https://fossee.in" target="_blank" rel="noopener">FOSSEE Group, IIT Bombay</a>
&nbsp;&bull;&nbsp;
<a href="mailto:pythonsupport@fossee.in">Contact</a>
</div>
{% endblock %}
</footer>

<!-- Toast notifications -->
<script>
{% if messages %}
{% for message in messages %}
toastr[{% if message.tags %} "{{ message.tags }}" {% else %} "info" {% endif %}]("{{ message }}");
toastr[{% if message.tags %}"{{ message.tags }}"{% else %}"info"{% endif %}]("{{ message }}");
{% endfor %}
{% endif %}
toastr.options = {
closeButton: true,
positionClass: "toast-top-right",
timeOut: 4000
};
</script>


</body>
<footer class="footer">
{% block footer %}
<div class="container">
Developed by FOSSEE group, IIT Bombay
</div>
{% endblock %}
</footer>
</html>
</html>
Loading