+ Malfestio is a decentralized learning platform built on the AT Protocol. We believe knowledge should be
+ portable, shareable, and owned by learners — not locked into proprietary platforms.
+
+
+ By combining spaced repetition, linked notes, and social features with decentralized identity and data
+ ownership, we're creating a new way to learn and share knowledge across the open web.
+
+);
+
+export default About;
diff --git a/web/src/pages/Landing.test.tsx b/web/src/pages/Landing.test.tsx
index 26d5513..54ab70f 100644
--- a/web/src/pages/Landing.test.tsx
+++ b/web/src/pages/Landing.test.tsx
@@ -17,7 +17,7 @@ describe("Landing Page", () => {
renderLanding();
expect(screen.getByText(/Learning on/i)).toBeInTheDocument();
- expect(screen.getByText(/the AT Protocol/i)).toBeInTheDocument();
+ expect(screen.getAllByText(/the AT Protocol/i).length).toBeGreaterThanOrEqual(1);
expect(screen.getByText(/Master complex topics/i)).toBeInTheDocument();
});
@@ -36,4 +36,13 @@ describe("Landing Page", () => {
expect(screen.getByText("Linked Notes")).toBeInTheDocument();
expect(screen.getByText("Social Learning")).toBeInTheDocument();
});
+
+ it("renders 'How it works' section", () => {
+ renderLanding();
+
+ expect(screen.getByText("How it works")).toBeInTheDocument();
+ expect(screen.getByText("Import")).toBeInTheDocument();
+ expect(screen.getByText("Study")).toBeInTheDocument();
+ expect(screen.getByText("Share")).toBeInTheDocument();
+ });
});
diff --git a/web/src/pages/Landing.tsx b/web/src/pages/Landing.tsx
index 225c4a9..a3e6951 100644
--- a/web/src/pages/Landing.tsx
+++ b/web/src/pages/Landing.tsx
@@ -1,88 +1,191 @@
+import { Footer } from "$components/layout/Footer";
import { A } from "@solidjs/router";
-import type { Component } from "solid-js";
+import type { Component, JSX } from "solid-js";
+import { For } from "solid-js";
+import { Motion } from "solid-motionone";
-const Feature: Component<{ title: string; desc: string }> = (props) => (
-
-
{props.title}
+const features = [{
+ title: "Flashcards",
+ desc: "Built-in spaced repetition system (SRS) ensuring you review the right material at the right time.",
+ icon: ,
+}, {
+ title: "Linked Notes",
+ desc: "Connect concepts with bidirectional links. Build a knowledge graph that grows with your understanding.",
+ icon: ,
+}, {
+ title: "Lectures & Articles",
+ desc: "Import content directly. Highlight, annotate, and turn key insights into flashcards instantly.",
+ icon: ,
+}, {
+ title: "Social Learning",
+ desc: "Publish your decks, follow curators, and fork existing content to improve it for everyone.",
+ icon: ,
+}, {
+ title: "Local-First",
+ desc: "Your data lives on your device. Offline-first architecture with ATProto for decentralized sync.",
+ icon: ,
+}, {
+ title: "Open Source",
+ desc: "Validates knowledge, not proprietary locks. Inspect the code, extend the schema, own the platform.",
+ icon: (
+
+ ),
+}];
+
+const steps = [{ title: "Import", desc: "Create cards from articles, lectures, or write your own notes." }, {
+ title: "Study",
+ desc: "Review with spaced repetition — the right card at the right time.",
+}, { title: "Share", desc: "Publish to the AT Protocol network and discover community content." }];
+
+const Feature: Component<{ title: string; desc: string; icon: JSX.Element }> = (props) => (
+