···11+{
22+ "version": 1.1,
33+ "atDirectives": [
44+ {
55+ "name": "@tailwind",
66+ "description": "Use the `@tailwind` directive to insert Tailwind's `base`, `components`, `utilities` and `screens` styles into your CSS.",
77+ "references": [
88+ {
99+ "name": "Tailwind Documentation",
1010+ "url": "https://tailwindcss.com/docs/functions-and-directives#tailwind"
1111+ }
1212+ ]
1313+ },
1414+ {
1515+ "name": "@apply",
1616+ "description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS. This is useful when you find a common utility pattern in your HTML that you’d like to extract to a new component.",
1717+ "references": [
1818+ {
1919+ "name": "Tailwind Documentation",
2020+ "url": "https://tailwindcss.com/docs/functions-and-directives#apply"
2121+ }
2222+ ]
2323+ },
2424+ {
2525+ "name": "@responsive",
2626+ "description": "You can generate responsive variants of your own classes by wrapping their definitions in the `@responsive` directive:\n```css\n@responsive {\n .alert {\n background-color: #E53E3E;\n }\n}\n```\n",
2727+ "references": [
2828+ {
2929+ "name": "Tailwind Documentation",
3030+ "url": "https://tailwindcss.com/docs/functions-and-directives#responsive"
3131+ }
3232+ ]
3333+ },
3434+ {
3535+ "name": "@screen",
3636+ "description": "The `@screen` directive allows you to create media queries that reference your breakpoints by **name** instead of duplicating their values in your own CSS:\n```css\n@screen sm {\n /* ... */\n}\n```\n…gets transformed into this:\n```css\n@media (min-width: 640px) {\n /* ... */\n}\n```\n",
3737+ "references": [
3838+ {
3939+ "name": "Tailwind Documentation",
4040+ "url": "https://tailwindcss.com/docs/functions-and-directives#screen"
4141+ }
4242+ ]
4343+ },
4444+ {
4545+ "name": "@variants",
4646+ "description": "Generate `hover`, `focus`, `active` and other **variants** of your own utilities by wrapping their definitions in the `@variants` directive:\n```css\n@variants hover, focus {\n .btn-brand {\n background-color: #3182CE;\n }\n}\n```\n",
4747+ "references": [
4848+ {
4949+ "name": "Tailwind Documentation",
5050+ "url": "https://tailwindcss.com/docs/functions-and-directives#variants"
5151+ }
5252+ ]
5353+ }
5454+ ]
5555+}
+17-6
README.md
···2233# Hi, I'm Tsiry Sandratraina
4455-[](https://deno.com)
55+[](https://deno.com)
66[](https://github.com/tsirysndr/me/actions/workflows/deploy.yml)
7788-This is my personal website. I'm a software engineer and I'm passionate about technology and innovation. I'm also a fan of entrepreneurship and I'm always looking for new opportunities to learn and grow. I'm currently working on a few projects and I'm always looking for new opportunities to collaborate with other people.
88+This is my personal website. I'm a software engineer and I'm passionate about
99+technology and innovation. I'm also a fan of entrepreneurship and I'm always
1010+looking for new opportunities to learn and grow. I'm currently working on a few
1111+projects and I'm always looking for new opportunities to collaborate with other
1212+people.
1313+1414+See this website is live at
1515+[tsiry-sandratraina.com](https://tsiry-sandratraina.com).
1616+1717+### Usage
9181010-See this website is live at [tsiry-sandratraina.com](https://tsiry-sandratraina.com).
1919+Make sure to install Deno: https://deno.land/manual/getting_started/installation
11201212-## Usage
2121+Then start the project:
13221414-```bash
1515-deno run -A main.tsx
2323+```
2424+deno task start
1625```
2626+2727+This will watch the project directory and restart as necessary.
···11-import html, { h } from "https://deno.land/x/htm@0.2.1/mod.ts";
22-export { html, h };
33-import dayjs from "npm:dayjs";
44-export { dayjs };
55-export { cyan } from "https://deno.land/std@0.192.0/fmt/colors.ts";
+8
dev.ts
···11+#!/usr/bin/env -S deno run -A --watch=static/,routes/
22+33+import dev from "$fresh/dev.ts";
44+import config from "./fresh.config.ts";
55+66+import "$std/dotenv/load.ts";
77+88+await dev(import.meta.url, "./main.ts", config);
+6
fresh.config.ts
···11+import tailwind from "$fresh/plugins/tailwind.ts";
22+import { defineConfig } from "$fresh/server.ts";
33+44+export default defineConfig({
55+ plugins: [tailwind()],
66+});
+29
fresh.gen.ts
···11+// DO NOT EDIT. This file is generated by Fresh.
22+// This file SHOULD be checked into source version control.
33+// This file is automatically updated during development when running `dev.ts`.
44+55+import * as $_404 from "./routes/_404.tsx";
66+import * as $_app from "./routes/_app.tsx";
77+import * as $api_joke from "./routes/api/joke.ts";
88+import * as $greet_name_ from "./routes/greet/[name].tsx";
99+import * as $index from "./routes/index.tsx";
1010+import * as $Counter from "./islands/Counter.tsx";
1111+import * as $NowPlaying from "./islands/NowPlaying.tsx";
1212+import type { Manifest } from "$fresh/server.ts";
1313+1414+const manifest = {
1515+ routes: {
1616+ "./routes/_404.tsx": $_404,
1717+ "./routes/_app.tsx": $_app,
1818+ "./routes/api/joke.ts": $api_joke,
1919+ "./routes/greet/[name].tsx": $greet_name_,
2020+ "./routes/index.tsx": $index,
2121+ },
2222+ islands: {
2323+ "./islands/Counter.tsx": $Counter,
2424+ "./islands/NowPlaying.tsx": $NowPlaying,
2525+ },
2626+ baseUrl: import.meta.url,
2727+} satisfies Manifest;
2828+2929+export default manifest;
···11+import { FreshContext } from "$fresh/server.ts";
22+33+// Jokes courtesy of https://punsandoneliners.com/randomness/programmer-jokes/
44+const JOKES = [
55+ "Why do Java developers often wear glasses? They can't C#.",
66+ "A SQL query walks into a bar, goes up to two tables and says “can I join you?”",
77+ "Wasn't hard to crack Forrest Gump's password. 1forrest1.",
88+ "I love pressing the F5 key. It's refreshing.",
99+ "Called IT support and a chap from Australia came to fix my network connection. I asked “Do you come from a LAN down under?”",
1010+ "There are 10 types of people in the world. Those who understand binary and those who don't.",
1111+ "Why are assembly programmers often wet? They work below C level.",
1212+ "My favourite computer based band is the Black IPs.",
1313+ "What programme do you use to predict the music tastes of former US presidential candidates? An Al Gore Rhythm.",
1414+ "An SEO expert walked into a bar, pub, inn, tavern, hostelry, public house.",
1515+];
1616+1717+export const handler = (_req: Request, _ctx: FreshContext): Response => {
1818+ const randomIndex = Math.floor(Math.random() * JOKES.length);
1919+ const body = JOKES[randomIndex];
2020+ return new Response(body);
2121+};
+5
routes/greet/[name].tsx
···11+import { PageProps } from "$fresh/server.ts";
22+33+export default function Greet(props: PageProps) {
44+ return <div>Hello {props.params.name}</div>;
55+}