diff --git a/src/core/__init__.py b/src/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/core/admin.py b/src/core/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/src/core/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/src/core/apps.py b/src/core/apps.py new file mode 100644 index 0000000..26f78a8 --- /dev/null +++ b/src/core/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class CoreConfig(AppConfig): + name = 'core' diff --git a/src/core/migrations/__init__.py b/src/core/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/core/models.py b/src/core/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/src/core/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/src/core/static/core/img/5x5-2023-11-16-at-14.56.56-1.jpeg b/src/core/static/core/img/5x5-2023-11-16-at-14.56.56-1.jpeg new file mode 100644 index 0000000..a8fd8cd Binary files /dev/null and b/src/core/static/core/img/5x5-2023-11-16-at-14.56.56-1.jpeg differ diff --git a/src/core/templates/core/index.html b/src/core/templates/core/index.html new file mode 100644 index 0000000..2a18ec4 --- /dev/null +++ b/src/core/templates/core/index.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}Home{% endblock %} + +{% block content %} + +

Welcome

+
+{% include "components/carousel.html" with carousel_id="hero" carousel_images=carousel_images %} +
+ +{% endblock %} diff --git a/src/core/tests.py b/src/core/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/src/core/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/core/urls.py b/src/core/urls.py new file mode 100644 index 0000000..2a47f7a --- /dev/null +++ b/src/core/urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from . import views + +app_name = "core" + +urlpatterns = [ + path("", views.index, name="index"), +] diff --git a/src/core/views.py b/src/core/views.py new file mode 100644 index 0000000..b57b2e1 --- /dev/null +++ b/src/core/views.py @@ -0,0 +1,10 @@ +from django.shortcuts import render +from django.templatetags.static import static + + +def index(request): + return render( + request, + "core/index.html", + {"carousel_images": [static("/core/img/5x5-2023-11-16-at-14.56.56-1.jpeg")]}, + ) diff --git a/src/polls/templates/polls/index.html.1 b/src/polls/templates/polls/index.html.1 new file mode 100644 index 0000000..d5cb959 --- /dev/null +++ b/src/polls/templates/polls/index.html.1 @@ -0,0 +1,658 @@ + + + + + + +Quatsh - Eindhovense Studenten Squash Rackets Vereniging + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
Menu
+ + + + +
+ + +
Menu
+ + + + +
+ + +
Menu
+ + + + +
+ + Become a member
  • Welcome to 
    E.S.S.R.V. Quatsh

    The most vibrant and friendliest student squash association 
    in the Netherlands
  • Become a Member!

    And be a part of the fastest growing student squash association of the Netherlands
  • What is Squash?

    Squash is a racket sport played by two players in a four-walled court with a small, hollow rubber ball. The objective is to hit the ball against the front wall in a way that makes it difficult for the opponent to return.

Who are we?

Training

Quatsh is here for every student, whether you are just starting out in squash or already a true pro!

Competition

Besides training, do you want to put your skills to work? There are competitions and tournaments!

Drinks

Besides sports, socializing is also a high priority, and so there are many club nights!

Activities

In addition to squash, there are plenty of different activities throughout the year.

Big Simple Page Break

M: board@quatsh.nl
B: NL86 BUNQ 2078 8328 71
KvK: 40238933
© Copyright 2026 - E.S.S.R.V.Quatsh - All Rights Reserved
"Beste site van het jaar!" - Qwebcie
+ + + + + + +chevron-up + + + + + + + + linkedin + + + + + + facebook + + + + pinterest + + + + youtube + + + + rss + + + + twitter + + + + instagram + + + + + + facebook-blank + + + + rss-blank + + + + linkedin-blank + + + + pinterest + + + + youtube + + + + twitter + + + + instagram + + + + + + + + + + + + + + + + + + + diff --git a/src/static/css/input.css b/src/static/css/input.css new file mode 100644 index 0000000..73a943c --- /dev/null +++ b/src/static/css/input.css @@ -0,0 +1 @@ +@import "tailwindcss" diff --git a/src/static/js/carousel.js b/src/static/js/carousel.js new file mode 100644 index 0000000..9b1b758 --- /dev/null +++ b/src/static/js/carousel.js @@ -0,0 +1,68 @@ +function initCarousel(id) { + document.addEventListener("DOMContentLoaded", function () { + const track = document.getElementById(id); + const originalSlides = Array.from(track.children); + const total = originalSlides.length; + + if (total <= 1) { + return; + } + + const firstClone = originalSlides[0].cloneNode(true); + const lastClone = originalSlides[total - 1].cloneNode(true); + track.appendChild(firstClone); + track.insertBefore(lastClone, originalSlides[0]); + + let current = 1; + let isTransitioning = false; + track.style.transform = `translateX(-${current * 100}%)`; + + const dots = document.querySelectorAll(`.${id}_dot`); + + function updateDots(index) { + const realIndex = (index - 1 + total) % total; + dots.forEach((d, i) => { + d.classList.toggle("opacity-100", i === realIndex); + d.classList.toggle("opacity-50", i !== realIndex); + }); + } + + function goTo(index) { + if (isTransitioning) return; + isTransitioning = true; + track.style.transition = "transform 500ms ease-in-out"; + current = index; + track.style.transform = `translateX(-${current * 100}%)`; + updateDots(current); + } + + function next() { + goTo(current + 1); + } + function prev() { + goTo(current - 1); + } + + track.addEventListener("transitionend", function () { + if (current === 0) { + track.style.transition = "none"; + current = total; + track.style.transform = `translateX(-${current * 100}%)`; + } + if (current === total + 1) { + track.style.transition = "none"; + current = 1; + track.style.transform = `translateX(-${current * 100}%)`; + } + + isTransitioning = false; + }); + + setInterval(next, 5000); + updateDots(current); + + window[`${id}_goTo`] = (i) => goTo(i + 1); + window[`${id}_next`] = next; + window[`${id}_prev`] = prev; + }); +} diff --git a/src/templates/base.html b/src/templates/base.html new file mode 100644 index 0000000..0efee55 --- /dev/null +++ b/src/templates/base.html @@ -0,0 +1,18 @@ +{% load static %} + + + + + + + {% block title %}My Site{% endblock %} + + + + + {% include "components/topbar.html" %} +
+ {% block content %}{% endblock %} +
+ + diff --git a/src/templates/components/carousel.html b/src/templates/components/carousel.html new file mode 100644 index 0000000..a25f9c0 --- /dev/null +++ b/src/templates/components/carousel.html @@ -0,0 +1,28 @@ +{% load static %} +
+ + {% if carousel_images|length > 1 %} + + +
+ {% for image in carousel_images %} + + {% endfor %} +
+ {% endif %} +
+ + diff --git a/src/templates/components/topbar.html b/src/templates/components/topbar.html new file mode 100644 index 0000000..ed0a97b --- /dev/null +++ b/src/templates/components/topbar.html @@ -0,0 +1,4 @@ + diff --git a/src/website/urls.py b/src/website/urls.py index 5115ec3..b0f85c6 100644 --- a/src/website/urls.py +++ b/src/website/urls.py @@ -21,10 +21,11 @@ from django.contrib import admin from django.urls import include, path urlpatterns = [ + path("", include("core.urls")), path("polls/", include("polls.urls")), path("admin/doc/", include("django.contrib.admindocs.urls")), path("admin/", admin.site.urls), ] -if os.getenv("DJANGO_RELOAD", "False") == "True": +if os.getenv("DJANGO_RELOAD", "false") == "true": urlpatterns.append(path("__reload__/", include("django_browser_reload.urls")))