# 🎪 hype ░▒▓███████████████████████████████████████████████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓████████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓████████▓▒░░▒▓██████▓▒░░▒▓███████▓▒░░▒▓██████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓████████▓▒░ ░▒▓███████████████████████████████████████████████▓▒░ `hype` wraps `hono` with useful features for fast prototyping: - HTTP logging to the console (disable with `NO_HTTP_LOG` env variable) - Static files served from `pub/` - Page-based routing to `.tsx` files that export a `JSX` function in `./src/pages` - Transpile `.ts` files in `src/js/blah.ts` via `website.com/js/blah.ts` - Helpers like `css` and `js` template tags. - Default, simple HTML5 layout with working frontend transpilation/bundling, or supply your own. - Optional CSS reset. - Optional pico.css. ## Overview Your project structure should be: ``` . ├── README.md ├── package.json ├── pub │   ├── asset.txt │   └── img │   └── logo.png ├── src │   ├── css │   │   └── main.css │   ├── js │   │   ├── about.ts │   │   └── main.ts │   ├── shared │   │   └── utils.ts │   ├── pages │   │   ├── _layout.tsx │   │   ├── about.tsx │   │   └── index.tsx │   └── server.ts └── tsconfig.json ``` ### URLs In the above, `/about` will render `./src/pages/about.tsx`. The `req` JSX prop will be given the `Hono` request: export default ({ req }) => `Query Param 'id': ${req.query('id')}` To put a file in `./src/pages` but prevent it from being server, preface it with `_`. ### Layout `hype` will wrap everything in a simple default layout unless `./src/pages/_layout.tsx` exists, in which case it'll use the default export in that file. Using the default layout, you can put TS in `./src/js/main.ts` and css in `./src/css/main.css` and they'll automatically work in your app. Here's a starting point: ```tsx export default ({ children, title }: any) => ( {title ?? "hype"}
{children}
) ``` ### pico.css To use pico.css with the default layout, create `Hype` with `{ pico: true }`: ```typescript import { Hype } from "hype" const app = new Hype({ pico: true }) ``` You can also use pico in your custom layouts: ```html ``` ### css CSS can be accessed via `/css/main.css`: ```html ``` Or written inline using the `css` template tag: ```tsx import { css } from "hype" export default () => (
{css` * { color: red; } `}

Hello

) ``` Install the `vscode-styled-components` VSCode extension to highlight inline `css` tags! ### css reset To use reset.css with the default layout, create `Hype` with `{ reset: true }`: ```typescript import { Hype } from "hype" const app = new Hype({ reset: true }) ``` You can also use the css reset in your custom layouts: ```html ``` ### js JS can be accessed (and transpiled) via `/js/main.ts` or `/shared/utils.ts`: ```html ``` import your modules relatively, for example in `main.ts`: ```typescript import { initAbout } from "./about" import utils from "./shared/utils" ``` Or written inline as transpiled typescript using the `js` template tag: ```tsx import { js } from "hype" export default () => (
{js` window.onload = () => alert(welcomeMsg(Date.now())) function welcomeMsg(time: number): string { return "Welcome to my website!" } `}

Hello!

) ``` Install the `vscode-styled-components` VSCode extension to highlight inline `js` tags! ### pub Anything in `pub/` is served as-is. Simple stuff. ### utils `hype` includes helpful utils for your webapp: - `capitalize(str: string): string` - Capitalizes a word - `css` Template Tag - Lets you inline CSS in your TSX. Returns a `