diff --git a/app/layout.tsx b/app/layout.tsx
new file mode 100644
index 0000000..3c2edd7
--- /dev/null
+++ b/app/layout.tsx
@@ -0,0 +1,29 @@
+import "@steffo/bluelib/dist/base.root.css"
+import "@steffo/bluelib/dist/classic.root.css"
+import "@steffo/bluelib/dist/glass.root.css"
+import "@steffo/bluelib/dist/fun.root.css"
+import "@steffo/bluelib/dist/colors-royalblue.root.css"
+import "@steffo/bluelib/dist/fonts-fira-ghpages.root.css"
+import React from "react"
+
+
+export const metadata = {
+ title: 'Unisteffo',
+ description: 'Gli appunti liberi di Steffo',
+}
+
+
+export interface RootLayoutProps {
+ children: React.ReactNode,
+}
+
+
+export default function RootLayout(props: RootLayoutProps) {
+ return (
+
+
+ {props.children}
+
+
+ )
+}
diff --git a/app/page.tsx b/app/page.tsx
index 2af0a4f..00b320e 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,3 +1,27 @@
+import { Chapter } from "../components/Chapter";
+import { Topic } from "../components/Topic";
+import { Layout } from "../components/Layout";
+
export default function Page() {
- return Hello, Next.js!
;
-}
\ No newline at end of file
+ return (
+
+
+
+ Il mio sito di appunti.
+
+
+
+ }
+ sidebar={
+
+
+ sus
+
+
+ }
+ />
+ )
+}
diff --git a/components/Chapter.tsx b/components/Chapter.tsx
new file mode 100644
index 0000000..e408f41
--- /dev/null
+++ b/components/Chapter.tsx
@@ -0,0 +1,20 @@
+import React from "react"
+
+
+export interface ChapterProps {
+ children: React.ReactNode,
+ heading: React.ReactNode,
+ columns: number,
+}
+
+
+export function Chapter(props: ChapterProps) {
+ return (
+
+
+ {props.heading}
+
+ {props.children}
+
+ )
+}
diff --git a/components/Layout.module.css b/components/Layout.module.css
new file mode 100644
index 0000000..5514cec
--- /dev/null
+++ b/components/Layout.module.css
@@ -0,0 +1,37 @@
+.layout {
+ padding: 8px;
+ height: calc(100vh - 16px);
+ overflow: hidden;
+
+ display: grid;
+ grid-template-areas:
+ "heading empty"
+ "main side"
+ ;
+ grid-template-rows: auto 1fr;
+ grid-template-columns: 1fr 320px;
+ align-content: stretch;
+ column-gap: 8px;
+}
+
+.layout > .heading {
+ grid-area: heading;
+}
+
+.layout > .main {
+ grid-area: main;
+ overflow-y: scroll;
+}
+
+.layout > .sidebar {
+ grid-area: side;
+ overflow-y: scroll;
+}
+
+.layout :where(:global(.chapter-0), :global(.chapter-1), :global(.chapter-2), :global(.chapter-3), :global(.chapter-4), :global(.chapter-5), :global(.chapter-6), :global(.chapter-7), :global(.chapter-8), :global(.chapter-9)):first-child {
+ margin-top: 0;
+}
+
+.layout :where(:global(.chapter-0), :global(.chapter-1), :global(.chapter-2), :global(.chapter-3), :global(.chapter-4), :global(.chapter-5), :global(.chapter-6), :global(.chapter-7), :global(.chapter-8), :global(.chapter-9)):last-child {
+ margin-bottom: 0;
+}
diff --git a/components/Layout.tsx b/components/Layout.tsx
new file mode 100644
index 0000000..b1997a9
--- /dev/null
+++ b/components/Layout.tsx
@@ -0,0 +1,28 @@
+import style from "./Layout.module.css"
+import Link from "next/link"
+
+
+export interface LayoutProps {
+ heading: React.ReactNode,
+ main: React.ReactNode,
+ sidebar: React.ReactNode,
+}
+
+
+export function Layout(props: LayoutProps) {
+ return (
+
+
+
+ {props.heading}
+
+
+
+ {props.main}
+
+
+
+ )
+}
diff --git a/components/Topic.tsx b/components/Topic.tsx
new file mode 100644
index 0000000..45d53db
--- /dev/null
+++ b/components/Topic.tsx
@@ -0,0 +1,19 @@
+import React from "react"
+
+
+export interface TopicProps {
+ children: React.ReactNode,
+ heading: React.ReactNode,
+}
+
+
+export function Topic(props: TopicProps) {
+ return (
+
+
+ {props.heading}
+
+ {props.children}
+
+ )
+}