Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
7a531b1
Fix resizing and closing windows
KavyanshKhaitan2 Aug 3, 2026
c6cb48c
Uploading images and closing windows fixed
KavyanshKhaitan2 Aug 4, 2026
29a9066
Fixed journalling
KavyanshKhaitan2 Aug 4, 2026
282bd1f
Replace 'login' with 'dashboard' if you are already logged in
KavyanshKhaitan2 Aug 5, 2026
8997972
Change journal.html
KavyanshKhaitan2 Aug 6, 2026
2194a73
Setup work for different journal types
KavyanshKhaitan2 Aug 6, 2026
58b3fa3
feat: windows are now fullscreenable
KavyanshKhaitan2 Aug 6, 2026
b1c7e18
Added journalling and viewing journals in project detail view and mad…
KavyanshKhaitan2 Aug 6, 2026
2fd207f
Remove TODO.md
KavyanshKhaitan2 Aug 7, 2026
979c948
Fix a few bugs
KavyanshKhaitan2 Aug 7, 2026
e21cd5b
Add delete button and some other stuff
KavyanshKhaitan2 Aug 7, 2026
16a40ed
Migrate from CDN to R2 Bucket
aoishik Aug 7, 2026
b3fd168
Add new dependancy to uv.lock
aoishik Aug 7, 2026
72a01f9
fix a few stuff related to image uploading
KavyanshKhaitan2 Aug 7, 2026
a644a2b
Add some debugging code
aoishik Aug 7, 2026
d19c317
Add more debugging code
aoishik Aug 7, 2026
2b5beca
More debugging
aoishik Aug 7, 2026
62f31a6
Fix Image Upload
aoishik Aug 7, 2026
57834a3
Make changes to image uploading: telemetry data
KavyanshKhaitan2 Aug 8, 2026
5726133
Add deleting journals
KavyanshKhaitan2 Aug 8, 2026
c150acf
Improve file upload names
aoishik Aug 8, 2026
5c25cb0
Start working on shipping projects
KavyanshKhaitan2 Aug 8, 2026
b81dd49
MAJOR refactor: Moved slack_bot to its own app.
KavyanshKhaitan2 Aug 8, 2026
062ba00
Migrate from Slack SDK to Slack Bolt
aoishik Aug 8, 2026
df5e3a2
Fix a few bugs
KavyanshKhaitan2 Aug 8, 2026
289d502
Work on ship (part 2) and add DEBUG to .env
KavyanshKhaitan2 Aug 8, 2026
6b06a06
Remove HC CDN key from .env.example
KavyanshKhaitan2 Aug 8, 2026
feaca20
Add proper play/pause button for music in the homepage and faq page a…
KavyanshKhaitan2 Aug 8, 2026
c9d7b48
Make errors visible on prod
KavyanshKhaitan2 Aug 9, 2026
01f2039
Add shipping a project
KavyanshKhaitan2 Aug 9, 2026
adc7c5f
Added /admin/ page and added a left navbar to it
KavyanshKhaitan2 Aug 10, 2026
5747170
Work on sidebar
KavyanshKhaitan2 Aug 11, 2026
36802db
Add all sidebar items (for now)
KavyanshKhaitan2 Aug 11, 2026
2261912
Figured out why static wasnt being served properly. Had static in .gi…
KavyanshKhaitan2 Aug 11, 2026
8e65785
Work a LOT on the admin + add Docs link
KavyanshKhaitan2 Aug 11, 2026
9c8ae08
ehh should keep faq link too
KavyanshKhaitan2 Aug 11, 2026
70321af
Add funny lines and circles thing
KavyanshKhaitan2 Aug 12, 2026
7b62c75
Some more admin dash changes
KavyanshKhaitan2 Aug 13, 2026
4b61414
Fix a few bugs
KavyanshKhaitan2 Aug 13, 2026
b713af0
fix an xss
KavyanshKhaitan2 Aug 13, 2026
c41544e
fix: prevent project names reaching unsafe javascript
coolton-agent Aug 13, 2026
15253b4
fix css styling after i added doctype
KavyanshKhaitan2 Aug 13, 2026
a15da00
fix: harden deployment and access controls
coolton-agent Aug 13, 2026
9beabf5
fix: remove remaining unsafe project title interpolation
coolton-agent Aug 13, 2026
c284bae
revert: keep project details publicly viewable
coolton-agent Aug 13, 2026
a6d7864
fix: align upload limit and development env example
coolton-agent Aug 13, 2026
a4810a0
Merge pull request #3 from coolton-agent/fix/prevent-stored-xss
KavyanshKhaitan2 Aug 13, 2026
4fff150
Add secret key to .env.example
KavyanshKhaitan2 Aug 13, 2026
ea2006a
fix spinner for firefox
KavyanshKhaitan2 Aug 13, 2026
d8cf731
Add icon to maximise and add reload button
KavyanshKhaitan2 Aug 13, 2026
bf45768
Add shipped_project_type chart
KavyanshKhaitan2 Aug 14, 2026
2cc57c0
Fix a bug where you can ship without IDV and also added /admin/users
KavyanshKhaitan2 Aug 14, 2026
773b305
oopsies forgot to remove googlecharts
KavyanshKhaitan2 Aug 14, 2026
b2c750a
Add support for both Slack Socket Mode and Https
aoishik Aug 14, 2026
51a0172
Update socket mode handler
aoishik Aug 14, 2026
c2913fc
Fix Socket Mode
aoishik Aug 14, 2026
531fac0
Add ?search= param
KavyanshKhaitan2 Aug 14, 2026
43338b7
improve admin and add user detail page
KavyanshKhaitan2 Aug 15, 2026
8e05faa
Add LOGIN_ALLOWED='maybe' for selective allowance
KavyanshKhaitan2 Aug 15, 2026
6288722
Add better looking icons
KavyanshKhaitan2 Aug 16, 2026
11c4fae
Fix Bugs
aoishik Aug 17, 2026
b9ee914
Start working on pathways
KavyanshKhaitan2 Aug 17, 2026
4d4f296
Add pathways
KavyanshKhaitan2 Aug 20, 2026
c7141c6
Add sum stuff to pathways in admin
KavyanshKhaitan2 Aug 20, 2026
e36aca8
Try a fix
aoishik Aug 20, 2026
5640d8f
typo fix
aoishik Aug 20, 2026
a669bc8
updated the homepage further
Sankarshan-T Aug 22, 2026
34cf105
forgot the button
Sankarshan-T Aug 22, 2026
e2fafb6
updated a page
Sankarshan-T Aug 23, 2026
0163ba4
sudo rm slack bolt
aoishik Aug 24, 2026
45ec823
Add slack.py
KavyanshKhaitan2 Aug 24, 2026
e4f30d4
Complete removal of slack_bot module
KavyanshKhaitan2 Aug 24, 2026
272a010
feat: ability to resize windows by hovering on the edge.
Rohan317685 Aug 24, 2026
4dcf57d
Work a bit on the pathways
KavyanshKhaitan2 Aug 24, 2026
2172203
Merge pull request #4 from Rohan317685/resize-window
KavyanshKhaitan2 Aug 24, 2026
e55b7d2
Pathway creation now works, and implemented messages framework for ad…
KavyanshKhaitan2 Aug 24, 2026
b31b4a9
fix: obscure scrolling bug in /admin/pathways/
KavyanshKhaitan2 Aug 25, 2026
ef8a0c6
updated pathways page
Sankarshan-T Aug 25, 2026
585f480
Change 'login' to 'start twisting' on the homepage
KavyanshKhaitan2 Aug 25, 2026
db6cf46
Move reload button to the front of the title bar and move future path…
KavyanshKhaitan2 Aug 25, 2026
ff21290
Split homepage taskbar into a cotton component and theme faqs.html
KavyanshKhaitan2 Aug 25, 2026
0a10080
Change taskbar and start menu on dashboard
KavyanshKhaitan2 Aug 25, 2026
0bddee9
Remove orphan button in the twisted menu
KavyanshKhaitan2 Aug 25, 2026
6167532
completed all the project page dialogs too.
Sankarshan-T Aug 25, 2026
bdf892f
Merge branch 'uiremake' of https://github.com/Rohan317685/twisted int…
Sankarshan-T Aug 25, 2026
55e5706
fixed some sizing
Sankarshan-T Aug 25, 2026
98088c6
Tweak projects/list.html a bit
KavyanshKhaitan2 Aug 25, 2026
c0e23ce
Tweak some shit
KavyanshKhaitan2 Aug 25, 2026
57176f3
scroll bar
Sankarshan-T Aug 25, 2026
1e3a4ea
Merge branch 'uiremake' of https://github.com/Rohan317685/twisted int…
Sankarshan-T Aug 25, 2026
8fee4f8
Merge origin/main and resolve PR conflicts
Copilot Aug 25, 2026
91cb16f
Update NPM_BIN_PATH to use environment variable
KavyanshKhaitan2 Aug 25, 2026
7554aef
Merge pull request #5 from Rohan317685/uiremake
KavyanshKhaitan2 Aug 25, 2026
fa2e1c9
misc. changes
KavyanshKhaitan2 Aug 25, 2026
2d17197
Remove the thumb buttons on the scrollbar
KavyanshKhaitan2 Aug 26, 2026
f6c2837
Try fixing deployments
KavyanshKhaitan2 Aug 26, 2026
e04a40e
Remove unnecessary 98.css builds
KavyanshKhaitan2 Aug 26, 2026
3d51150
Add a UI mockup for project status
KavyanshKhaitan2 Aug 26, 2026
ff1372b
Fix: Overlapped window resizing
Rohan317685 Aug 27, 2026
16e0c85
Merge pull request #6 from Rohan317685/Ui-changes
Rohan317685 Aug 27, 2026
8fa4d9a
start + task
Sankarshan-T Aug 27, 2026
5293b99
Fix issue with devving on windows
KavyanshKhaitan2 Aug 27, 2026
6f8a65b
Push fix for devving on Windows
KavyanshKhaitan2 Aug 27, 2026
cba91d5
Add debug admin review panel
KavyanshKhaitan2 Aug 27, 2026
0a615e9
Revert "Fix issue with devving on windows"
KavyanshKhaitan2 Aug 28, 2026
7432ca7
Merge branch 'main' into uiremake
KavyanshKhaitan2 Aug 28, 2026
cdc7ed7
Merge pull request #7 from Rohan317685/uiremake
KavyanshKhaitan2 Aug 28, 2026
eb9173f
Add error logging for gunicorn
KavyanshKhaitan2 Aug 28, 2026
64f119b
this should fix error logging :hs:
KavyanshKhaitan2 Aug 28, 2026
af038a4
Rename docker target to 'build' instead of the misleading 'development'
KavyanshKhaitan2 Aug 28, 2026
af7e40a
Added a migration i forgot to add before
KavyanshKhaitan2 Aug 30, 2026
b1a7b56
QoL features
KavyanshKhaitan2 Aug 31, 2026
056947c
Make changes, add referral system
KavyanshKhaitan2 Sep 1, 2026
c481226
Add referral indicators
KavyanshKhaitan2 Sep 1, 2026
159566c
Add some audit logs
KavyanshKhaitan2 Sep 1, 2026
6ce387d
Make changes :p
KavyanshKhaitan2 Sep 1, 2026
31e070c
Bump cryptography from 49.0.0 to 50.0.0
dependabot[bot] Sep 1, 2026
1484e46
Bump sqlparse from 0.5.5 to 0.6.0
dependabot[bot] Sep 1, 2026
392d816
Merge pull request #1 from hackclub/dependabot/uv/cryptography-50.0.0
3kh0 Sep 1, 2026
400fefe
Required playable url to ship && added a pathway detail view
KavyanshKhaitan2 Sep 3, 2026
a89500b
Merge pull request #2 from hackclub/dependabot/uv/sqlparse-0.6.0
KavyanshKhaitan2 Sep 3, 2026
d61e1c1
Add discover page
KavyanshKhaitan2 Sep 3, 2026
8e62303
Make the dashboard's taskbutton a bit better in terms of how its rend…
KavyanshKhaitan2 Sep 3, 2026
d1cc946
Add screenshot field and other QoL
KavyanshKhaitan2 Sep 4, 2026
f004c39
Add Ari integration (kinda?)
KavyanshKhaitan2 Sep 4, 2026
3cb6d71
Better feedback for copy button
KavyanshKhaitan2 Sep 4, 2026
04f58f0
Added full ari integration
KavyanshKhaitan2 Sep 5, 2026
22f40b0
Add QoL features, and fix a few critical bugs
KavyanshKhaitan2 Sep 5, 2026
10690e4
Potential fix for pull request finding 'CodeQL / Client-side URL redi…
KavyanshKhaitan2 Sep 8, 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
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,3 @@ twisted/*.sqlite3

.env
twisted/.env
static/
4 changes: 3 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@
".venv": true,
"**/__pycache__": true
},
"djangoCotton.templatePaths": ["templates/cotton", "twisted/*/templates/cotton"]
"djangoCotton.templatePaths": [
"twisted/templates/cotton", "twisted/*/templates/cotton", ".venv/lib/*/site-packages/django_cotton_ui/templates/cotton"
]
}
13 changes: 0 additions & 13 deletions TODO.md

This file was deleted.

10 changes: 9 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,16 @@ dependencies = [
"psycopg[binary]>=3.3.4",
"python-dotenv>=1.2.2",
"requests>=2.34.2",
"slack-sdk>=3.43.0",
"slack-bolt>=1.30.0",
"tzdata>=2026.3",
"urllib3>=2.7.0",
"whitenoise>=6.12.0",
"boto3>=1.43.66",
"django-cotton-ui>=0.3.2",
"django-google-charts>=0.1.1",
"django-qsstats-magic>=1.1.0",
"django-htmx>=1.29.0",
"django-extensions>=4.1",
"django-mathfilters>=1.0.0",
"django-humanize>=0.1.2",
]
Empty file added slack_bot/slack.py
Empty file.
20 changes: 18 additions & 2 deletions twisted/.env.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
SECRET_KEY=<insert-super-secure-secret-here>
LOGIN_ENABLED=true # possible options: 'true,false,maybe'

DEBUG=true

POSTGRES_DB = django
POSTGRES_USER = django
POSTGRES_PASSWORD = django
Expand All @@ -13,10 +18,21 @@ HACKATIME_CLIENT_SECRET =
HACKATIME_REDIRECT_URI = https://localhost:8000/auth/hackatime_callback

SLACK_TOKEN = xoxb-***
SLACK_SIGNING_SECRET =
SLACK_APP_TOKEN = xapp-***
SLACK_MODE = https

ALLOWED_HOSTS = 127.0.0.1, localhost
CSRF_TRUSTED_ORIGINS = http://127.0.0.1:8000, http://localhost:8000

HACKCLUB_CDN_API_KEY = sk_cdn_***
R2_ENDPOINT = https://<your-account-id>.r2.cloudflarestorage.com
R2_ACCESS_KEY = <your-access-key>
R2_SECRET_KEY = <your-secret-key>
R2_BUCKET = <your-bucket>
R2_PUBLIC_URL = <your-public-url>
R2_TOKEN =

LOGIN_ENABLED=true
DEBUG_REVIEW=true
ARI_INGEST_ENDPOINT=
ARI_SIGNING_SECRET=
ARI_WEBHOOK_SECRET=
2 changes: 1 addition & 1 deletion twisted/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
### Build ###
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS development
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS build

ENV DEBIAN_FRONTEND=noninteractive

Expand Down
11 changes: 9 additions & 2 deletions twisted/common/templates/base.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
{% load static tailwind_tags static %}
{% load tailwind_tags static %}
<html>
<head>
{% tailwind_css %}
{% block head %}{% endblock head %}
<link rel="icon" href="{% static 'favicon.png' %}" />
<title>Twisted</title>
</head>
<body class="font-vintage">
<body class="font-vintage os">
{% block body %}
meow :3
{% endblock body %}
</body>
<script>
// Timezone settings
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; // e.g. "America/New_York"
document.cookie = "django_timezone=" + timezone;
</script>
</html>
4 changes: 4 additions & 0 deletions twisted/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ services:
db:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
Expand Down
7 changes: 6 additions & 1 deletion twisted/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
#!/bin/bash

uv run manage.py migrate --noinput
uv run gunicorn -w 3 mysite.wsgi:application --bind 0.0.0.0:8000
uv run gunicorn -w 3 mysite.wsgi:application \
--bind 0.0.0.0:8000 \
--threads=4 \
--worker-class=gthread \
--log-level info \
--capture-output
19 changes: 19 additions & 0 deletions twisted/mysite/middleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import zoneinfo
from django.utils import timezone

class TimezoneMiddleware:
def __init__(self, get_response):
self.get_response = get_response

def __call__(self, request):
try:
# get django_timezone from cookie
tzname = request.COOKIES.get("django_timezone")
if tzname:
timezone.activate(zoneinfo.ZoneInfo(tzname))
else:
timezone.deactivate()
except Exception as e:
timezone.deactivate()

return self.get_response(request)
55 changes: 50 additions & 5 deletions twisted/mysite/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,24 @@
# See https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-&3p#whs%8@!e1=fl$!wk^y6^e@z+714@714xd$=0ghmfyk43bn'
SECRET_KEY = os.environ['SECRET_KEY']

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
DEBUG = os.environ.get('DEBUG', 'false').lower() in ['true', 'on', '1']
DEBUG_REVIEW = os.environ.get('DEBUG_REVIEW', str(DEBUG)).lower() in ['true', 'on', '1']

USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Behind the TLS-terminating proxy above, cookies should never travel over plain
# HTTP once we're not in local dev.
SESSION_COOKIE_SECURE = not DEBUG
CSRF_COOKIE_SECURE = not DEBUG
SECURE_SSL_REDIRECT = not DEBUG
SECURE_HSTS_SECONDS = 0 if DEBUG else 60 * 60 * 24 * 365
SECURE_HSTS_INCLUDE_SUBDOMAINS = not DEBUG
SECURE_HSTS_PRELOAD = not DEBUG

X_FRAME_OPTIONS = 'SAMEORIGIN'

allowed_hosts_raw = os.getenv("ALLOWED_HOSTS", "127.0.0.1,localhost")
Expand All @@ -45,22 +55,27 @@
TAILWIND_APP_NAME = 'tailwindcsstheme'

INSTALLED_APPS = [
'jazzmin',
'django.contrib.admin',
# 'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',

# Your apps
'common',
'twisted_site',

# 3rd party apps
'django_cotton',
'django_cotton_ui',
'tailwind',
TAILWIND_APP_NAME,
'django_htmx',
'django_extensions',
'mathfilters',
'django_humanize'
]

if DEBUG:
Expand All @@ -76,6 +91,8 @@
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'mysite.middleware.TimezoneMiddleware',
"django_htmx.middleware.HtmxMiddleware",
]

if DEBUG:
Expand Down Expand Up @@ -146,6 +163,7 @@
TIME_ZONE = 'UTC'

USE_I18N = True
USE_L10N = True

USE_TZ = True

Expand All @@ -156,4 +174,31 @@
STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR / 'static'
CSRF_COOKIE_HTTPONLY = False
NPM_BIN_PATH = os.environ.get("NPM_BIN_PATH", "npm")
NPM_BIN_PATH = os.environ.get("NPM_BIN_PATH", "npm")

# Django Messages Framework
MESSAGE_STORAGE = "django.contrib.messages.storage.cookie.CookieStorage"


# Logging
LOGGING = {
'version': 1,
'disable_existing_loggers': False, # Keeps Gunicorn's loggers active
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'root': {
'handlers': ['console'],
'level': 'INFO',
},
}

# Ari (Review)
# https://ari.hackclub.com/docs/webhooks
ARI_INGEST_ENDPOINT = os.environ.get('ARI_INGEST_ENDPOINT')
ARI_SIGNING_SECRET = os.environ.get('ARI_SIGNING_SECRET')
# Separate from ARI_SIGNING_SECRET: signs deliveries Ari sends to us (Settings -> Webhooks),
# not requests we send to Ari.
ARI_WEBHOOK_SECRET = os.environ.get('ARI_WEBHOOK_SECRET')
3 changes: 0 additions & 3 deletions twisted/mysite/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,15 @@
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""

from django.contrib import admin
from django.urls import include, path
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
path("admin/", admin.site.urls),
path("", include("twisted_site.urls")),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

if settings.DEBUG:
# Include django_browser_reload URLs only in DEBUG mode
urlpatterns += [
path("__reload__/", include("django_browser_reload.urls")),
]
28 changes: 28 additions & 0 deletions twisted/tailwindcsstheme/static_src/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions twisted/tailwindcsstheme/static_src/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
"start": "npm run dev",
"build": "npm run build:clean && npm run build:tailwind",
"build:clean": "rimraf ../static/css/dist",
"build:tailwind": "cross-env NODE_ENV=production postcss ./src/styles.css -o ../static/css/dist/styles.css --minify && postcss ./src/win98.css -o ../static/css/dist/win98.css --minify",
"dev": "concurrently \"cross-env NODE_ENV=development postcss ./src/styles.css -o ../static/css/dist/styles.css --watch\" \"cross-env NODE_ENV=development postcss ./src/win98.css -o ../static/css/dist/win98.css --watch\""
"build:tailwind": "cross-env NODE_ENV=production postcss ./src/styles.css -o ../static/css/dist/styles.css --minify",
"dev": "cross-env NODE_ENV=development postcss ./src/styles.css -o ../static/css/dist/styles.css --watch"
},
"keywords": [],
"author": "",
"license": "MIT",
"devDependencies": {
"@tailwindcss/postcss": "^4.3.0",
"@tailwindcss/typography": "^0.5.20",
"98.css": "^0.1.21",
"concurrently": "^10.0.4",
"cross-env": "^10.1.0",
Expand All @@ -24,4 +25,4 @@
"rimraf": "^6.1.3",
"tailwindcss": "^4.3.0"
}
}
}
Loading