Skip to content

Commit 0859b73

Browse files
committed
Repositioned copy and SEO so Schuly reads as a plugin-driven portal, not a Schulnetz-only app
Reframed hero, features, download blurb, and all SEO meta + JSON-LD: Schuly is the open-source student-portal frontend, Schulnetz is the flagship plugin (via Schulware). Schulnetz keywords stay dense so the page still ranks, but the positioning now matches the project's actual scope.
1 parent 12b0485 commit 0859b73

5 files changed

Lines changed: 33 additions & 23 deletions

File tree

src/app/components/download/download.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<h2 class="download-title">Ready when you are.</h2>
88
<p class="download-description">
99
Available on every platform a student carries. Open source, free, and built in public.
10+
Connects to Schulnetz out of the box - or any school system with a Schuly plugin.
1011
</p>
1112
<div class="download-buttons">
1213
<a href="https://github.com/schulydev/Schuly/releases" target="_blank" rel="noopener" class="download-btn">

src/app/components/features/features.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
<div class="container">
33
<div class="section-header">
44
<div class="eyebrow">Features</div>
5-
<h2 class="section-title">Designed for students.<br />Built for everyone.</h2>
5+
<h2 class="section-title">One app.<br />Any school system.</h2>
66
<p class="section-description">
7-
Every feature serves a purpose. No bloat, no clutter - just the tools you actually use,
8-
wrapped in an interface that gets out of your way.
7+
A clean Flutter UI on top of a plugin-driven backend. Schulnetz works out of the box -
8+
any other system plugs in by implementing one contract.
99
</p>
1010
</div>
1111

src/app/components/features/features.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ export class Features {
2929
private grid = viewChild<ElementRef<HTMLElement>>('grid');
3030

3131
features: Feature[] = [
32+
{ icon: faPuzzlePiece, title: 'Plugin-driven backend', description: 'The core handles UI, auth, and storage. School-system adapters live as plugins - Schulnetz (via Schulware) ships first-class, others implement the SDK contract.' },
3233
{ icon: faChartLine, title: 'Grades & analytics', description: 'Every grade visualised with averages, trends, and breakdowns. See your trajectory at a glance.' },
3334
{ icon: faCalendarDays, title: 'Agenda & absences', description: 'Schedule, exams, and absence records - synced live, designed to fit on a phone screen.' },
3435
{ icon: faBell, title: 'Push notifications', description: 'New grades, schedule changes, important announcements. Delivered the moment they appear.' },
35-
{ icon: faPuzzlePiece, title: 'Plugin architecture', description: 'A stable contract lets any school system plug in. Schulware, Example, and more - without touching the core.' },
3636
{ icon: faUsers, title: 'Multi-account', description: 'Switch between profiles in a tap. Built for students juggling more than one identity.' },
3737
{ icon: faPalette, title: 'shadcn-style UI', description: 'Composable primitives, neutral defaults, dark-first. Themeable down to the token - no design-system lock-in.' },
3838
{ icon: faMobileScreen, title: 'iOS · Android · Web', description: 'One Flutter codebase, three first-class targets. Your data follows you everywhere.' },

src/app/components/hero/hero.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55

66
<div class="hero-content">
77
<a href="https://github.com/schulydev/Schuly/releases" target="_blank" rel="noopener" class="hero-pill" #pill>
8-
<span class="hero-pill-badge">New</span>
9-
<span class="hero-pill-text">Open source · plugin-based architecture</span>
8+
<span class="hero-pill-badge">Plugin</span>
9+
<span class="hero-pill-text">Schulnetz support out of the box</span>
1010
<fa-icon [icon]="faArrowRight" class="hero-pill-arrow"></fa-icon>
1111
</a>
1212

1313
<h1 class="hero-title" #title>
14-
The better Schulnetz app.<br />
15-
<span class="hero-title-dim">Built in the open.</span>
14+
Your school,<br />
15+
<span class="hero-title-dim">in one app.</span>
1616
</h1>
1717

1818
<p class="hero-sub" #sub>
19-
Schuly is a modern, mobile-first alternative to the official Schulnetz client.
19+
Schuly is an open-source student portal with a plugin-driven backend.
2020
Grades, agenda, and absences in a fast Flutter app for iOS, Android, and Web -
21-
backed by a plugin-driven C# backend that any school system can plug in to.
21+
with first-class support for Schulnetz and any other school system that ships a plugin.
2222
</p>
2323

2424
<div class="hero-actions" #actions>

src/index.html

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
<meta name="theme-color" content="#000000">
88
<meta name="color-scheme" content="dark">
99

10-
<title>Schuly - The better Schulnetz app | Open-source student portal for iOS, Android & Web</title>
10+
<title>Schuly - Open-source student portal · Schulnetz support out of the box</title>
1111

12-
<meta name="description" content="Schuly is the better Schulnetz - a modern, open-source, mobile-first alternative to the official Schulnetz client. Grades, agenda, absences, and push notifications in a fast Flutter app for iOS, Android, and Web.">
13-
<meta name="keywords" content="Schuly, Schulnetz, Schulnetz app, better Schulnetz, Schulnetz alternative, Schulnetz iOS, Schulnetz Android, Schulware, Centerboard, student portal, Schulnoten, Stundenplan, Absenzen, school app, open source Schulnetz, Schulnetz Flutter, KSO, Kantonsschule, Gymnasium, Berufsschule">
12+
<meta name="description" content="Schuly is an open-source, plugin-driven student portal for iOS, Android, and Web. Schulnetz is supported out of the box - any other school system plugs in by implementing the Schuly plugin contract.">
13+
<meta name="keywords" content="Schuly, Schulnetz, Schulnetz app, Schulnetz alternative, Schulnetz iOS, Schulnetz Android, Schulware, Centerboard, student portal, school CRM, school app, Schulnoten, Stundenplan, Absenzen, open source student portal, Flutter school app, Kantonsschule, Gymnasium, Berufsschule, KSO">
1414
<meta name="author" content="schulydev">
1515
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
1616
<meta name="googlebot" content="index, follow">
@@ -34,8 +34,8 @@
3434
<!-- Open Graph -->
3535
<meta property="og:type" content="website">
3636
<meta property="og:site_name" content="Schuly">
37-
<meta property="og:title" content="Schuly - The better Schulnetz app">
38-
<meta property="og:description" content="Open-source, mobile-first alternative to the official Schulnetz client. Grades, agenda, absences, and push notifications - on iOS, Android, and Web.">
37+
<meta property="og:title" content="Schuly - Open-source student portal · Schulnetz out of the box">
38+
<meta property="og:description" content="Plugin-driven student portal for iOS, Android, and Web. Schulnetz supported out of the box - any school system plugs in via the plugin SDK.">
3939
<meta property="og:url" content="https://schuly.dev/">
4040
<meta property="og:locale" content="en_US">
4141
<meta property="og:locale:alternate" content="de_CH">
@@ -46,8 +46,8 @@
4646

4747
<!-- Twitter / X -->
4848
<meta name="twitter:card" content="summary_large_image">
49-
<meta name="twitter:title" content="Schuly - The better Schulnetz app">
50-
<meta name="twitter:description" content="Open-source, mobile-first alternative to the official Schulnetz client. iOS, Android, Web.">
49+
<meta name="twitter:title" content="Schuly - Open-source student portal · Schulnetz out of the box">
50+
<meta name="twitter:description" content="Plugin-driven student portal for iOS, Android, and Web. Schulnetz supported out of the box.">
5151
<meta name="twitter:image" content="https://schuly.dev/assets/app_icon.png">
5252
<meta name="twitter:image:alt" content="Schuly app icon">
5353

@@ -58,7 +58,7 @@
5858
"@type": "WebSite",
5959
"name": "Schuly",
6060
"url": "https://schuly.dev/",
61-
"description": "The better Schulnetz - open-source, mobile-first alternative to the official Schulnetz client.",
61+
"description": "Schuly is an open-source, plugin-driven student portal for iOS, Android, and Web. Schulnetz is supported out of the box.",
6262
"inLanguage": ["en", "de-CH"],
6363
"publisher": {
6464
"@type": "Organization",
@@ -75,10 +75,10 @@
7575
"@context": "https://schema.org",
7676
"@type": "MobileApplication",
7777
"name": "Schuly",
78-
"alternateName": ["Schuly App", "Schulnetz App", "The better Schulnetz"],
78+
"alternateName": ["Schuly App", "Schulnetz App", "Schulnetz client", "open student portal"],
7979
"url": "https://schuly.dev/",
8080
"image": "https://schuly.dev/assets/app_icon.png",
81-
"description": "Schuly is the better Schulnetz: a modern, open-source, mobile-first student portal for Schulnetz / Schulware. Grades, agenda, absences, push notifications, multi-account, plugin architecture. iOS, Android, Web.",
81+
"description": "Schuly is an open-source, plugin-driven student portal for iOS, Android, and Web. Schulnetz is supported out of the box via the Schulware plugin; any other school system can plug in by implementing the Schuly plugin contract.",
8282
"applicationCategory": "EducationApplication",
8383
"applicationSubCategory": "Student portal",
8484
"operatingSystem": "Android, iOS, Web",
@@ -110,15 +110,16 @@
110110
"https://schuly.dev/assets/schuly-account-page.png"
111111
],
112112
"featureList": [
113+
"Plugin-driven backend (any school system)",
114+
"Schulnetz support out of the box (Schulware plugin)",
113115
"Grades and analytics",
114116
"Agenda and absences",
115117
"Push notifications",
116-
"Plugin architecture",
117118
"Multi-account support",
118119
"OIDC authentication",
119120
"iOS, Android, and Web"
120121
],
121-
"keywords": "Schulnetz, Schulware, student portal, Schulnoten, Stundenplan, Absenzen"
122+
"keywords": "Schulnetz, Schulware, student portal, plugin architecture, Schulnoten, Stundenplan, Absenzen"
122123
}
123124
</script>
124125

@@ -133,7 +134,15 @@
133134
"name": "What is Schuly?",
134135
"acceptedAnswer": {
135136
"@type": "Answer",
136-
"text": "Schuly is a modern, open-source, mobile-first alternative to the official Schulnetz client. It provides grades, agenda, absences, and push notifications in a fast Flutter app for iOS, Android, and Web."
137+
"text": "Schuly is an open-source, plugin-driven student portal for iOS, Android, and Web. The app handles UI, authentication, and storage; school-system integrations live as plugins. Schulnetz is supported out of the box via the Schulware plugin."
138+
}
139+
},
140+
{
141+
"@type": "Question",
142+
"name": "Does Schuly work with Schulnetz?",
143+
"acceptedAnswer": {
144+
"@type": "Answer",
145+
"text": "Yes. Schulnetz is supported out of the box via the official Schulware plugin, with grades, agenda, absences, exams, and push notifications. Schulnetz is currently the most widely used integration."
137146
}
138147
},
139148
{

0 commit comments

Comments
 (0)