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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
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
+
+
+
+
+
+
+close trophy beer ellipsis-v graduation-cap chevron-up
+
+
+
+
+
+
+
+ linkedin
+
+
+
+
+
+ facebook
+
+
+
+ pinterest
+
+
+
+ youtube
+
+
+
+
+
+ instagram
+
+
+
+
+
+ facebook-blank
+
+
+
+
+ linkedin-blank
+
+
+
+ pinterest
+
+
+
+ youtube
+
+
+
+
+ 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 %}
+
+
+ {% for image in carousel_images %}
+
+
+
+ {% endfor %}
+
+ {% 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 @@
+
+ Home
+
+
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")))