Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 0 additions & 6 deletions bun.lock

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

2 changes: 0 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
"@fortawesome/free-solid-svg-icons": "^7.1.0",
"@ngx-translate/core": "^17.0.0",
"@ngx-translate/http-loader": "^17.0.0",
"animejs": "^4.4.1",
"express": "^5",
"rxjs": "~7.8.0",
"tslib": "^2.3.0"
Expand All @@ -54,7 +53,6 @@
"@angular/build": "^20.3.5",
"@angular/cli": "^20.3.5",
"@angular/compiler-cli": "^20.3.0",
"@types/animejs": "^3.1.13",
"@types/jasmine": "~5.1.0",
"baseline-browser-mapping": "^2.10.33",
"jasmine-core": "~5.9.0",
Expand Down
16 changes: 5 additions & 11 deletions public/i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,15 @@
"docs": "Doku",
"openSource": "Open Source",
"githubAria": "GitHub",
"getSchuly": "Schuly holen",
"getSchuly": "Schuly herunterladen",
"language": "Sprache"
},
"hero": {
"pillBadge": "Offen",
"pillText": "Schulnetz, OdaOrg und mehr – in einer App",
"title1": "Alle deine Schulen,",
"title2": "in einer App.",
"sub": "Schuly bringt Noten, Stundenplan, Agenda und Absenzen an einen Ort. Entwickelt für Lernende und Studierende, die schnellen Zugriff auf ihre wichtigsten Schuldaten möchten – auf iOS und Android, der Browser folgt bald. Schulnetz und OdaOrg werden bereits unterstützt, weitere Systeme folgen.",
"sub": "Noten, Stundenplan, Agenda und Absenzen an einem Ort. Auf iOS und Android, der Browser folgt bald. Schulnetz und OdaOrg werden bereits unterstützt, weitere Systeme folgen.",
"ctaDownload": "Schuly herunterladen",
"ctaGithub": "Auf GitHub ansehen",
"stats": {
"stars": "GitHub-Stars",
"downloads": "App-Downloads",
"platforms": "Plattformen"
}
"ctaGithub": "Auf GitHub ansehen"
},
"features": {
"eyebrow": "Features",
Expand Down Expand Up @@ -119,7 +112,7 @@
]
},
"download": {
"eyebrow": "Schuly holen",
"eyebrow": "Schuly herunterladen",
"title": "Bereit loszulegen?",
"description": "Schuly ist kostenlos, Open Source und auf allen wichtigen Plattformen verfügbar.",
"comingSoon": "Bald verfügbar",
Expand Down Expand Up @@ -150,6 +143,7 @@
"plugins": "Plugins",
"sdk": "Plugin-SDK",
"releases": "Releases",
"docs": "Doku",
"issues": "Issues",
"features": "Features",
"faq": "FAQ",
Expand Down
12 changes: 3 additions & 9 deletions public/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,11 @@
"language": "Language"
},
"hero": {
"pillBadge": "Open",
"pillText": "Schulnetz, OdaOrg, and more — in one app",
"title1": "All your schools,",
"title2": "in one app.",
"sub": "Schuly brings your grades, schedule, agenda, and absences together in one place. Built for students who want quick access to the school data that matters — on iOS and Android, with the web coming soon. Schulnetz and OdaOrg are already supported, with more systems on the way.",
"sub": "Grades, schedule, agenda, and absences in one place. On iOS and Android, with the web coming soon. Schulnetz and OdaOrg are already supported, with more systems on the way.",
"ctaDownload": "Download Schuly",
"ctaGithub": "View on GitHub",
"stats": {
"stars": "GitHub stars",
"downloads": "App downloads",
"platforms": "Platforms"
}
"ctaGithub": "View on GitHub"
},
"features": {
"eyebrow": "Features",
Expand Down Expand Up @@ -150,6 +143,7 @@
"plugins": "Plugins",
"sdk": "Plugin SDK",
"releases": "Releases",
"docs": "Docs",
"issues": "Issues",
"features": "Features",
"faq": "FAQ",
Expand Down
12 changes: 3 additions & 9 deletions public/i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,11 @@
"language": "Langue"
},
"hero": {
"pillBadge": "Open",
"pillText": "Schulnetz, OdaOrg et plus – dans une seule app",
"title1": "Toutes tes écoles,",
"title2": "dans une seule app.",
"sub": "Schuly réunit tes notes, ton horaire, ton agenda et tes absences au même endroit. Conçu pour les élèves qui veulent un accès rapide aux données scolaires essentielles – sur iOS et Android, le web bientôt disponible. Schulnetz et OdaOrg sont déjà pris en charge, d'autres systèmes suivront.",
"sub": "Notes, horaire, agenda et absences au même endroit. Sur iOS et Android, le web bientôt disponible. Schulnetz et OdaOrg sont déjà pris en charge, d'autres systèmes suivront.",
"ctaDownload": "Télécharger Schuly",
"ctaGithub": "Voir sur GitHub",
"stats": {
"stars": "Étoiles GitHub",
"downloads": "Téléchargements",
"platforms": "Plateformes"
}
"ctaGithub": "Voir sur GitHub"
},
"features": {
"eyebrow": "Fonctionnalités",
Expand Down Expand Up @@ -150,6 +143,7 @@
"plugins": "Plugins",
"sdk": "SDK plugins",
"releases": "Versions",
"docs": "Docs",
"issues": "Issues",
"features": "Fonctionnalités",
"faq": "FAQ",
Expand Down
12 changes: 3 additions & 9 deletions public/i18n/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,11 @@
"language": "Lingua"
},
"hero": {
"pillBadge": "Open",
"pillText": "Schulnetz, OdaOrg e altro – in un'unica app",
"title1": "Tutte le tue scuole,",
"title2": "in un'unica app.",
"sub": "Schuly riunisce voti, orario, agenda e assenze in un unico posto. Pensata per gli studenti che vogliono un accesso rapido ai dati scolastici essenziali – su iOS e Android, il web in arrivo. Schulnetz e OdaOrg sono già supportati, altri sistemi seguiranno.",
"sub": "Voti, orario, agenda e assenze in un unico posto. Su iOS e Android, il web in arrivo. Schulnetz e OdaOrg sono già supportati, altri sistemi seguiranno.",
"ctaDownload": "Scarica Schuly",
"ctaGithub": "Vedi su GitHub",
"stats": {
"stars": "Stelle GitHub",
"downloads": "Download app",
"platforms": "Piattaforme"
}
"ctaGithub": "Vedi su GitHub"
},
"features": {
"eyebrow": "Funzionalità",
Expand Down Expand Up @@ -150,6 +143,7 @@
"plugins": "Plugin",
"sdk": "SDK plugin",
"releases": "Versioni",
"docs": "Docs",
"issues": "Issue",
"features": "Funzionalità",
"faq": "FAQ",
Expand Down
12 changes: 3 additions & 9 deletions public/i18n/rm.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,11 @@
"language": "Lingua"
},
"hero": {
"pillBadge": "Open",
"pillText": "Schulnetz, OdaOrg ed auter – en in'app",
"title1": "Tut tias scolas,",
"title2": "en in'app.",
"sub": "Schuly reunescha notas, urari, agenda ed absenzas en in sulet lieu. Concepì per scolars che vulan in access svelt a las datas da scola impurtantas – sin iOS ed Android, l'internet vegn prest. Schulnetz ed OdaOrg vegnan gia sustegnids, ulteriurs sistems suandan.",
"sub": "Notas, urari, agenda ed absenzas en in sulet lieu. Sin iOS ed Android, l'internet vegn prest. Schulnetz ed OdaOrg vegnan gia sustegnids, ulteriurs sistems suandan.",
"ctaDownload": "Telechargiar Schuly",
"ctaGithub": "Guardar sin GitHub",
"stats": {
"stars": "Stailas GitHub",
"downloads": "Telechargiadas",
"platforms": "Plattafurmas"
}
"ctaGithub": "Guardar sin GitHub"
},
"features": {
"eyebrow": "Funcziuns",
Expand Down Expand Up @@ -150,6 +143,7 @@
"plugins": "Plugins",
"sdk": "SDK Plugins",
"releases": "Versiuns",
"docs": "Docs",
"issues": "Issues",
"features": "Funcziuns",
"faq": "FAQ",
Expand Down
5 changes: 4 additions & 1 deletion src/app/components/faq/faq.scss
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,12 @@
visibility 0s linear 0s;
}

.faq-a {
.faq-a-inner {
overflow: hidden;
min-height: 0;
}

.faq-a {
padding: 0 1.25rem 1.25rem;
color: var(--text-dim);
font-size: 0.9375rem;
Expand Down
4 changes: 3 additions & 1 deletion src/app/components/faq/faq.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ import { faChevronDown } from '@fortawesome/free-solid-svg-icons';
<fa-icon [icon]="faChevronDown" class="faq-icon" aria-hidden="true" />
</button>
<div class="faq-a-wrap" [id]="'faq-a-' + i" role="region">
<div class="faq-a">{{ 'faq.items.' + i + '.a' | translate }}</div>
<div class="faq-a-inner">
<div class="faq-a">{{ 'faq.items.' + i + '.a' | translate }}</div>
</div>
</div>
</div>
}
Expand Down
1 change: 1 addition & 0 deletions src/app/components/footer/footer.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<div class="footer-col">
<div class="footer-col-title">{{ 'footer.cols.resources' | translate }}</div>
<a href="https://github.com/schulydev/Schuly/releases" target="_blank" rel="noopener">{{ 'footer.links.releases' | translate }}</a>
<a href="https://docs.schuly.dev" target="_blank" rel="noopener">{{ 'footer.links.docs' | translate }}</a>
<a href="https://github.com/schulydev/Schuly/issues" target="_blank" rel="noopener">{{ 'footer.links.issues' | translate }}</a>
<a href="/#features">{{ 'footer.links.features' | translate }}</a>
<a href="/#faq">{{ 'footer.links.faq' | translate }}</a>
Expand Down
29 changes: 3 additions & 26 deletions src/app/components/hero/hero.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,16 @@
<div class="hero-noise" aria-hidden="true"></div>

<div class="hero-content">
<a href="https://github.com/schulydev/Schuly/releases" target="_blank" rel="noopener" class="hero-pill" #pill>
<span class="hero-pill-badge">{{ 'hero.pillBadge' | translate }}</span>
<span class="hero-pill-text">{{ 'hero.pillText' | translate }}</span>
<fa-icon [icon]="faArrowRight" class="hero-pill-arrow"></fa-icon>
</a>

<h1 class="hero-title" #title>
<h1 class="hero-title">
{{ 'hero.title1' | translate }}<br />
<span class="hero-title-dim">{{ 'hero.title2' | translate }}</span>
</h1>

<p class="hero-sub" #sub>
<p class="hero-sub">
{{ 'hero.sub' | translate }}
</p>

<div class="hero-actions" #actions>
<div class="hero-actions">
<a href="#download" class="btn btn-primary">
{{ 'hero.ctaDownload' | translate }}
<fa-icon [icon]="faArrowRight"></fa-icon>
Expand All @@ -29,22 +23,5 @@ <h1 class="hero-title" #title>
{{ 'hero.ctaGithub' | translate }}
</a>
</div>

<div class="hero-stats" #stage>
<div class="stat">
<div class="stat-num">{{ stars() }}</div>
<div class="stat-label">{{ 'hero.stats.stars' | translate }}</div>
</div>
<div class="stat-sep"></div>
<div class="stat">
<div class="stat-num">{{ downloads() }}</div>
<div class="stat-label">{{ 'hero.stats.downloads' | translate }}</div>
</div>
<div class="stat-sep"></div>
<div class="stat">
<div class="stat-num">3</div>
<div class="stat-label">{{ 'hero.stats.platforms' | translate }}</div>
</div>
</div>
</div>
</section>
88 changes: 0 additions & 88 deletions src/app/components/hero/hero.scss
Original file line number Diff line number Diff line change
Expand Up @@ -59,46 +59,7 @@ $cube-half: math.div($cube-size, 2);
align-items: center;
}

.hero-pill {
display: inline-flex;
align-items: center;
gap: 0.625rem;
padding: 0.375rem 0.875rem 0.375rem 0.5rem;
border-radius: 999px;
background: rgba(255, 255, 255, 0.04);
border: 1px solid var(--border-strong);
color: var(--text-dim);
font-size: 0.8125rem;
font-weight: 500;
transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;

&-badge {
background: #fff;
color: #000;
font-size: 0.6875rem;
font-weight: 600;
padding: 0.125rem 0.5rem;
border-radius: 999px;
text-transform: uppercase;
letter-spacing: 0.04em;
}

&-arrow {
font-size: 0.75rem;
transition: transform 0.2s ease;
}

&:hover {
background: rgba(255, 255, 255, 0.07);
border-color: rgba(255, 255, 255, 0.2);
color: #fff;

.hero-pill-arrow { transform: translateX(2px); }
}
}

.hero-title {
margin-top: 1.75rem;
font-size: clamp(2.5rem, 6.5vw, 5.25rem);
font-weight: 700;
letter-spacing: -0.045em;
Expand Down Expand Up @@ -199,55 +160,6 @@ $cube-half: math.div($cube-size, 2);
filter: blur(12px);
}

.hero-stats {
margin-top: 4rem;
display: flex;
align-items: center;
gap: 2.5rem;
padding: 1rem 1.75rem;
background: rgba(255, 255, 255, 0.02);
border: 1px solid var(--border);
border-radius: 999px;
backdrop-filter: blur(10px);

}

.stat {
text-align: center;

&-num {
font-size: 1.375rem;
font-weight: 600;
color: #fff;
font-variant-numeric: tabular-nums;
letter-spacing: -0.02em;
}

&-label {
font-size: 0.75rem;
color: var(--text-mute);
text-transform: uppercase;
letter-spacing: 0.08em;
margin-top: 0.125rem;
}

&-sep {
width: 1px;
height: 28px;
background: var(--border);
}
}

@media (max-width: 640px) {
.hero { padding-top: 7rem; }

.hero-stats {
gap: 1.25rem;
padding: 0.75rem 1rem;
flex-wrap: wrap;
justify-content: center;
}

.stat-num { font-size: 1.125rem; }
.stat-label { font-size: 0.6875rem; }
}
Loading