summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NOTES.md2
-rw-r--r--assets/avatars/.DS_Storebin0 -> 6148 bytes
-rw-r--r--assets/avatars/bros/04a3e845-545a-4563-83e1-f7ccb34e34a9.pngbin0 -> 12333 bytes
-rw-r--r--assets/avatars/bros/05bcc4c7-13b2-4242-a660-02d6609ebd25.pngbin0 -> 17590 bytes
-rw-r--r--assets/avatars/bros/149ccaed-89be-4064-991c-4e37f082cdd9.pngbin0 -> 12740 bytes
-rw-r--r--assets/avatars/bros/159173f1-1556-46cc-87c1-2cec9541f504.pngbin0 -> 7342 bytes
-rw-r--r--assets/avatars/bros/15ff72ea5cd7027a.jpgbin0 -> 83272 bytes
-rw-r--r--assets/avatars/bros/1c92955d-cc23-4723-b2cd-04c7238d9cdc.pngbin0 -> 12608 bytes
-rw-r--r--assets/avatars/bros/1dff3587-75f1-47e5-bbfd-9c337b8c4c67.jpgbin0 -> 2629 bytes
-rw-r--r--assets/avatars/bros/2b0c4931-7b3d-466d-8eea-aceb358f7d76.jpegbin0 -> 2789 bytes
-rw-r--r--assets/avatars/bros/2c920876-0a54-46cb-863b-ce489adebb7e.jpgbin0 -> 2609 bytes
-rw-r--r--assets/avatars/bros/33da9fac-a4c4-4288-a54c-c6280c6220d3.pngbin0 -> 13620 bytes
-rw-r--r--assets/avatars/bros/3519be1d-df9e-4c60-8403-9c47499d84cb.pngbin0 -> 13082 bytes
-rw-r--r--assets/avatars/bros/3c28e55b-58c4-4d25-a76e-70b8239846d1.pngbin0 -> 14327 bytes
-rw-r--r--assets/avatars/bros/3e432ff5-0e36-40e8-8706-5f238df7ebb0.jpegbin0 -> 4418 bytes
-rw-r--r--assets/avatars/bros/3e5ffe6f-6c7d-459e-8ea0-bedb85875eaa.pngbin0 -> 16459 bytes
-rw-r--r--assets/avatars/bros/49c0e107-d221-402f-9a42-16b531baa9ad.pngbin0 -> 16723 bytes
-rw-r--r--assets/avatars/bros/4bcd672a-bc4b-4fc2-b122-e30c45ac15e5.jpgbin0 -> 4832 bytes
-rw-r--r--assets/avatars/bros/5a1d970a-2766-47c2-b9d2-425789faa52e.pngbin0 -> 12912 bytes
-rw-r--r--assets/avatars/bros/5e94ccbd-50b3-408a-8019-af76f00f2e11.pngbin0 -> 7143 bytes
-rw-r--r--assets/avatars/bros/68faa862-4198-438b-8972-d88ba9806c06.pngbin0 -> 12682 bytes
-rw-r--r--assets/avatars/bros/69376d6b-b145-4edc-9277-aedc03de20d1.jpgbin0 -> 5867 bytes
-rw-r--r--assets/avatars/bros/6a1f9f06-042d-4aca-a16e-7efec588757e.pngbin0 -> 9854 bytes
-rw-r--r--assets/avatars/bros/6ea7215f-116f-40f3-a45e-4f98f549bce2.jpgbin0 -> 2629 bytes
-rw-r--r--assets/avatars/bros/75e258d6-a850-4438-a2d5-f9a46c545c0b.pngbin0 -> 13486 bytes
-rw-r--r--assets/avatars/bros/779d4203-0863-43df-b66f-5134d5a92d2e.pngbin0 -> 13397 bytes
-rw-r--r--assets/avatars/bros/7c60fcdb-7164-4f8b-9b03-b4f70e029d80.pngbin0 -> 15914 bytes
-rw-r--r--assets/avatars/bros/84b61747-4cc3-49b0-a646-baec96352f05.pngbin0 -> 7269 bytes
-rw-r--r--assets/avatars/bros/86390603-1ca1-4ba2-a81b-def1fb82ab0b.pngbin0 -> 12686 bytes
-rw-r--r--assets/avatars/bros/89da29c1-ae95-48ba-b954-6e690b56e19b.jpgbin0 -> 4691 bytes
-rw-r--r--assets/avatars/bros/8df3a7b3-653f-4aae-a673-1cb3595564d2.pngbin0 -> 15006 bytes
-rw-r--r--assets/avatars/bros/904467df-9c43-419d-912b-1b83f712172c.pngbin0 -> 16966 bytes
-rw-r--r--assets/avatars/bros/9afc3e65-4287-4e48-a4b3-01625e9b78a1.pngbin0 -> 14147 bytes
-rw-r--r--assets/avatars/bros/Ej5Ys-pUwAAjQ6-.jpegbin0 -> 58965 bytes
-rw-r--r--assets/avatars/bros/a3d10289-4cdd-44c6-9d61-da7e760b2812.pngbin0 -> 13737 bytes
-rw-r--r--assets/avatars/bros/a60e5493-75a0-4c49-a060-1b0e88b19ad8.pngbin0 -> 15364 bytes
-rw-r--r--assets/avatars/bros/ac3ac83e-96eb-49f5-b71c-856b23dc3ccc.pngbin0 -> 9744 bytes
-rw-r--r--assets/avatars/bros/bbe5f3a1-c893-4808-946f-3f567b834655.pngbin0 -> 21035 bytes
-rw-r--r--assets/avatars/bros/chad.pngbin0 -> 29388 bytes
-rw-r--r--assets/avatars/bros/d0d8a2bb-284c-4b80-bd86-28f201ff2939.pngbin0 -> 14104 bytes
-rw-r--r--assets/avatars/bros/d0f68378-38a2-45c6-af27-c5748d87736e.pngbin0 -> 7846 bytes
-rw-r--r--assets/avatars/bros/daaf0fc3-b344-448f-b9f0-6ee95b262521.pngbin0 -> 10350 bytes
-rw-r--r--assets/avatars/bros/e1c40fb4-ff6f-42dd-9ea0-540504999b60.pngbin0 -> 23713 bytes
-rw-r--r--assets/avatars/bros/ea72e0f8-5a83-4b51-9b49-ea3f56509d8e.jpgbin0 -> 5509 bytes
-rw-r--r--assets/avatars/bros/ee6f2951-dc28-4b59-b54d-553944e8ea87.pngbin0 -> 6989 bytes
-rw-r--r--assets/avatars/bros/f6c04eb5-4741-4882-ae2c-7b0b49f66502.jpgbin0 -> 6556 bytes
-rw-r--r--assets/avatars/bros/fd8b2219-7435-4fc3-9722-a82370be2001.jpgbin0 -> 6556 bytes
-rw-r--r--assets/avatars/memes/Affirmative-Fed-Boi-Chad.pngbin0 -> 7131 bytes
-rw-r--r--assets/avatars/memes/Bashar-Al-Assad-Chad.pngbin0 -> 5136 bytes
-rw-r--r--assets/avatars/memes/Buddhist-Chad.pngbin0 -> 5756 bytes
-rw-r--r--assets/avatars/memes/Chad-No-Nut.pngbin0 -> 9303 bytes
-rw-r--r--assets/avatars/memes/Crusade-Chad.pngbin0 -> 6295 bytes
-rw-r--r--assets/avatars/memes/Frenchman-Chad.pngbin0 -> 7332 bytes
-rw-r--r--assets/avatars/memes/German-Soldier-Chad.pngbin0 -> 5593 bytes
-rw-r--r--assets/avatars/memes/Hitler-Chad.pngbin0 -> 7464 bytes
-rw-r--r--assets/avatars/memes/Hype-Beast-Chad.pngbin0 -> 7887 bytes
-rw-r--r--assets/avatars/memes/Jew-Chad.pngbin0 -> 11718 bytes
-rw-r--r--assets/avatars/memes/Joker-Chad.pngbin0 -> 10335 bytes
-rw-r--r--assets/avatars/memes/King-Harkinian-Chad.pngbin0 -> 6976 bytes
-rw-r--r--assets/avatars/memes/Military-Chad.pngbin0 -> 8517 bytes
-rw-r--r--assets/avatars/memes/Nazbol-Chad.pngbin0 -> 6731 bytes
-rw-r--r--assets/avatars/memes/Nordic-Chad-No-Beard-Black-HEadset.pngbin0 -> 11227 bytes
-rw-r--r--assets/avatars/memes/Portugeuse-Chad.pngbin0 -> 12146 bytes
-rw-r--r--assets/avatars/memes/Red-Headed-Gamer-Chad.pngbin0 -> 138536 bytes
-rw-r--r--assets/avatars/memes/Saudi-Arabian-Chad.pngbin0 -> 4937 bytes
-rw-r--r--assets/avatars/memes/Suited-Chad.pngbin0 -> 9253 bytes
-rw-r--r--assets/avatars/memes/Trump-Chad.pngbin0 -> 8165 bytes
-rw-r--r--assets/avatars/memes/gigachad.pngbin0 -> 576429 bytes
-rw-r--r--assets/avatars/memes/wojak-cry.jpegbin0 -> 8022 bytes
-rw-r--r--assets/board/boards/AI.svg1
-rw-r--r--assets/board/boards/ai.svg1
-rw-r--r--assets/board/boards/art.svg26
-rw-r--r--assets/board/boards/bookmark.svg6
-rw-r--r--assets/board/boards/books.svg21
-rw-r--r--assets/board/boards/btc.svg12
-rw-r--r--assets/board/boards/business.svg27
-rw-r--r--assets/board/boards/chud.jpgbin0 -> 41666 bytes
-rw-r--r--assets/board/boards/computing.svg19
-rw-r--r--assets/board/boards/crypto.svg12
-rw-r--r--assets/board/boards/family.svg35
-rw-r--r--assets/board/boards/film.svg27
-rw-r--r--assets/board/boards/food.svg41
-rw-r--r--assets/board/boards/gmi.svg24
-rw-r--r--assets/board/boards/hbd.svg30
-rw-r--r--assets/board/boards/health.svg17
-rw-r--r--assets/board/boards/history.svg16
-rw-r--r--assets/board/boards/humor.svg1
-rw-r--r--assets/board/boards/irl.svg45
-rw-r--r--assets/board/boards/links.svg31
-rw-r--r--assets/board/boards/misc.svg1
-rw-r--r--assets/board/boards/money.svg65
-rw-r--r--assets/board/boards/music.svg25
-rw-r--r--assets/board/boards/ngmi.svg23
-rw-r--r--assets/board/boards/orient.svg22
-rw-r--r--assets/board/boards/physiognomy.jpgbin0 -> 41666 bytes
-rw-r--r--assets/board/boards/physiognomy.svgbin0 -> 41666 bytes
-rw-r--r--assets/board/boards/politics.svg30
-rw-r--r--assets/board/boards/public.svg23
-rw-r--r--assets/board/boards/religion.svg13
-rw-r--r--assets/board/boards/science.svg32
-rw-r--r--assets/board/boards/sex.svg55
-rw-r--r--assets/board/boards/spinner.svg1
-rw-r--r--assets/board/boards/tech.svg28
-rw-r--r--assets/board/boards/theory.svg100
-rw-r--r--assets/board/boards/travel.svg17
-rw-r--r--assets/board/boards/ui8
-rw-r--r--assets/board/boards/urbit.svg4
-rw-r--r--assets/board/boards/vip.svg94
-rw-r--r--assets/board/boards/war.svg43
-rw-r--r--assets/board/boards/wyb.svg1
-rw-r--r--assets/board/boards/zh.svg45
-rw-r--r--assets/board/lol.lol1
-rw-r--r--assets/board/octicons/bold-24.svg1
-rw-r--r--assets/board/octicons/code-24.svg1
-rw-r--r--assets/board/octicons/code-square-24.svg1
-rw-r--r--assets/board/octicons/heading-24.svg1
-rw-r--r--assets/board/octicons/image-24.svg1
-rw-r--r--assets/board/octicons/italic-24.svg1
-rw-r--r--assets/board/octicons/link-24.svg1
-rw-r--r--assets/board/octicons/list-ordered-24.svg1
-rw-r--r--assets/board/octicons/list-unordered-24.svg1
-rw-r--r--assets/board/octicons/quote-24.svg1
-rw-r--r--assets/board/octicons/screen-full-24.svg1
-rw-r--r--assets/board/octicons/screen-normal-24.svg1
-rw-r--r--assets/board/octicons/x-24.svg1
-rw-r--r--assets/board/ui/collapse.svg16
-rw-r--r--assets/board/ui/copy.svg31
-rw-r--r--assets/board/ui/delete.svg21
-rw-r--r--assets/board/ui/down.svg12
-rw-r--r--assets/board/ui/downvote.svg11
-rw-r--r--assets/board/ui/edit.svg16
-rw-r--r--assets/board/ui/left.svg12
-rw-r--r--assets/board/ui/menu.svg14
-rw-r--r--assets/board/ui/poll.svg15
-rw-r--r--assets/board/ui/reply.svg12
-rw-r--r--assets/board/ui/right.svg15
-rw-r--r--assets/board/ui/search.svg17
-rw-r--r--assets/board/ui/sort.svg1
-rw-r--r--assets/board/ui/tianming.svg76
-rw-r--r--assets/board/ui/uncollapse.svg20
-rw-r--r--assets/board/ui/upvote.svg13
-rw-r--r--assets/fonts/CrimsonText-Bold.ttfbin0 -> 112116 bytes
-rw-r--r--assets/fonts/CrimsonText-BoldItalic.ttfbin0 -> 114268 bytes
-rw-r--r--assets/fonts/CrimsonText-Italic.ttfbin0 -> 109440 bytes
-rw-r--r--assets/fonts/CrimsonText-Regular.ttfbin0 -> 106512 bytes
-rw-r--r--assets/fonts/CrimsonText-SemiBold.ttfbin0 -> 110420 bytes
-rw-r--r--assets/fonts/CrimsonText-SemiBoldItalic.ttfbin0 -> 111332 bytes
-rw-r--r--assets/fonts/Crimson_Text/Crimson_Text,Inter.zipbin0 -> 4307878 bytes
-rw-r--r--assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Bold.ttfbin0 -> 112116 bytes
-rw-r--r--assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-BoldItalic.ttfbin0 -> 114268 bytes
-rw-r--r--assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Italic.ttfbin0 -> 109440 bytes
-rw-r--r--assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Regular.ttfbin0 -> 106512 bytes
-rw-r--r--assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-SemiBold.ttfbin0 -> 110420 bytes
-rw-r--r--assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-SemiBoldItalic.ttfbin0 -> 111332 bytes
-rw-r--r--assets/fonts/Crimson_Text/Crimson_Text/OFL.txt93
-rw-r--r--assets/fonts/In/Inter/Inter/Inter-VariableFont_slnt,wght.ttfbin0 -> 804612 bytes
-rw-r--r--assets/fonts/In/Inter/Inter/OFL.txt93
-rw-r--r--assets/fonts/In/Inter/Inter/README.txt72
-rw-r--r--assets/fonts/In/Inter/Inter/static/Inter-Black.ttfbin0 -> 316848 bytes
-rw-r--r--assets/fonts/In/Inter/Inter/static/Inter-Bold.ttfbin0 -> 316584 bytes
-rw-r--r--assets/fonts/In/Inter/Inter/static/Inter-ExtraBold.ttfbin0 -> 317184 bytes
-rw-r--r--assets/fonts/In/Inter/Inter/static/Inter-ExtraLight.ttfbin0 -> 311232 bytes
-rw-r--r--assets/fonts/In/Inter/Inter/static/Inter-Light.ttfbin0 -> 310832 bytes
-rw-r--r--assets/fonts/In/Inter/Inter/static/Inter-Medium.ttfbin0 -> 315132 bytes
-rw-r--r--assets/fonts/In/Inter/Inter/static/Inter-Regular.ttfbin0 -> 310252 bytes
-rw-r--r--assets/fonts/In/Inter/Inter/static/Inter-SemiBold.ttfbin0 -> 316220 bytes
-rw-r--r--assets/fonts/In/Inter/Inter/static/Inter-Thin.ttfbin0 -> 310984 bytes
-rw-r--r--assets/fonts/Inter-Black.ttfbin0 -> 316848 bytes
-rw-r--r--assets/fonts/Inter-Bold.ttfbin0 -> 316584 bytes
-rw-r--r--assets/fonts/Inter-ExtraBold.ttfbin0 -> 317184 bytes
-rw-r--r--assets/fonts/Inter-ExtraLight.ttfbin0 -> 311232 bytes
-rw-r--r--assets/fonts/Inter-Light.ttfbin0 -> 310832 bytes
-rw-r--r--assets/fonts/Inter-Medium.ttfbin0 -> 315132 bytes
-rw-r--r--assets/fonts/Inter-Regular.ttfbin0 -> 310252 bytes
-rw-r--r--assets/fonts/Inter-SemiBold.ttfbin0 -> 316220 bytes
-rw-r--r--assets/fonts/Inter-Thin.ttfbin0 -> 310984 bytes
-rw-r--r--assets/fonts/Inter-VariableFont.ttfbin0 -> 804612 bytes
-rw-r--r--assets/fonts/Inter-VariableFont_slnt,wght.ttfbin0 -> 804612 bytes
-rw-r--r--assets/fonts/Inter/Inter/Inter-VariableFont_slnt,wght.ttfbin0 -> 804612 bytes
-rw-r--r--assets/fonts/Inter/Inter/OFL.txt93
-rw-r--r--assets/fonts/Inter/Inter/README.txt72
-rw-r--r--assets/fonts/Inter/Inter/static/Inter-Black.ttfbin0 -> 316848 bytes
-rw-r--r--assets/fonts/Inter/Inter/static/Inter-Bold.ttfbin0 -> 316584 bytes
-rw-r--r--assets/fonts/Inter/Inter/static/Inter-ExtraBold.ttfbin0 -> 317184 bytes
-rw-r--r--assets/fonts/Inter/Inter/static/Inter-ExtraLight.ttfbin0 -> 311232 bytes
-rw-r--r--assets/fonts/Inter/Inter/static/Inter-Light.ttfbin0 -> 310832 bytes
-rw-r--r--assets/fonts/Inter/Inter/static/Inter-Medium.ttfbin0 -> 315132 bytes
-rw-r--r--assets/fonts/Inter/Inter/static/Inter-Regular.ttfbin0 -> 310252 bytes
-rw-r--r--assets/fonts/Inter/Inter/static/Inter-SemiBold.ttfbin0 -> 316220 bytes
-rw-r--r--assets/fonts/Inter/Inter/static/Inter-Thin.ttfbin0 -> 310984 bytes
-rw-r--r--assets/icons/favicon.icobin0 -> 14830 bytes
-rw-r--r--assets/icons/search.svg13
-rw-r--r--assets/icons/tianming.svg76
-rw-r--r--assets/input.css (renamed from js/styles.css)0
-rw-r--r--assets/soyjaks/addict.pngbin0 -> 28769 bytes
-rw-r--r--assets/soyjaks/adulterer.pngbin0 -> 17777 bytes
-rw-r--r--assets/soyjaks/billions.pngbin0 -> 5656 bytes
-rw-r--r--assets/soyjaks/bloomer.pngbin0 -> 27711 bytes
-rw-r--r--assets/soyjaks/chudcry.jpegbin0 -> 68402 bytes
-rw-r--r--assets/soyjaks/chudjak.pngbin0 -> 34330 bytes
-rw-r--r--assets/soyjaks/chudsmile.pngbin0 -> 86665 bytes
-rw-r--r--assets/soyjaks/coomer.pngbin0 -> 39311 bytes
-rw-r--r--assets/soyjaks/crychud.pngbin0 -> 22140 bytes
-rw-r--r--assets/soyjaks/cuck.pngbin0 -> 16222 bytes
-rw-r--r--assets/soyjaks/eunuch.pngbin0 -> 22677 bytes
-rw-r--r--assets/soyjaks/fatjak.pngbin0 -> 292409 bytes
-rw-r--r--assets/soyjaks/friendzoned.pngbin0 -> 13294 bytes
-rw-r--r--assets/soyjaks/furry.pngbin0 -> 11142 bytes
-rw-r--r--assets/soyjaks/gay.pngbin0 -> 12359 bytes
-rw-r--r--assets/soyjaks/griller.pngbin0 -> 31793 bytes
-rw-r--r--assets/soyjaks/grinsoy.jpgbin0 -> 52824 bytes
-rw-r--r--assets/soyjaks/groomer.pngbin0 -> 15929 bytes
-rw-r--r--assets/soyjaks/grooomer.pngbin0 -> 16205 bytes
-rw-r--r--assets/soyjaks/husband.pngbin0 -> 59738 bytes
-rw-r--r--assets/soyjaks/improover.pngbin0 -> 21254 bytes
-rw-r--r--assets/soyjaks/incel.pngbin0 -> 23925 bytes
-rw-r--r--assets/soyjaks/mouthjak.pngbin0 -> 120926 bytes
-rw-r--r--assets/soyjaks/normal.pngbin0 -> 13084 bytes
-rw-r--r--assets/soyjaks/partner.pngbin0 -> 40135 bytes
-rw-r--r--assets/soyjaks/paypig.pngbin0 -> 47172 bytes
-rw-r--r--assets/soyjaks/pervert.pngbin0 -> 21049 bytes
-rw-r--r--assets/soyjaks/polygamist.pngbin0 -> 66516 bytes
-rw-r--r--assets/soyjaks/pua.pngbin0 -> 22117 bytes
-rw-r--r--assets/soyjaks/pussyhound.pngbin0 -> 36644 bytes
-rw-r--r--assets/soyjaks/redditjak.pngbin0 -> 107557 bytes
-rw-r--r--assets/soyjaks/smartjak.jpegbin0 -> 8317 bytes
-rw-r--r--assets/soyjaks/soyjak.pngbin0 -> 405676 bytes
-rw-r--r--assets/soyjaks/sugardaddy.pngbin0 -> 42204 bytes
-rw-r--r--assets/soyjaks/tranny.pngbin0 -> 33738 bytes
-rw-r--r--assets/soyjaks/troon.pngbin0 -> 45304 bytes
-rw-r--r--assets/soyjaks/twink.pngbin0 -> 16270 bytes
-rw-r--r--assets/soyjaks/volcel.pngbin0 -> 27745 bytes
-rw-r--r--assets/soyjaks/weeb.pngbin0 -> 26588 bytes
-rw-r--r--assets/styles.css (renamed from js/output.css)330
-rw-r--r--dune6
-rw-r--r--dune-project2
-rw-r--r--flake.nix1
-rw-r--r--js/.gitignore34
-rw-r--r--js/Pepe.tsx369
-rw-r--r--js/README.md15
-rw-r--r--js/bun.lock189
-rw-r--r--js/index.ts1
-rw-r--r--js/package.json16
-rw-r--r--js/tailwind.config.js5
-rw-r--r--js/tsconfig.json29
-rw-r--r--lib/pages/BlogIndex.mlx1
-rw-r--r--tailwind.sh1
247 files changed, 1878 insertions, 973 deletions
diff --git a/NOTES.md b/NOTES.md
index 082a9d4..8def51e 100644
--- a/NOTES.md
+++ b/NOTES.md
@@ -21,6 +21,8 @@ The user is experiencing a build failure with the `litedb` library. The error me
* Tailwind is abominable. They deprecated the tailwind.config.js file for a shitty CLI with barely any options. You can't tell it which folders to follow so just call it from root.
`bunx @tailwindcss/cli -i js/styles.css -o js/output.css`
+ more info here
+[](https://tailwindcss.com/docs/detecting-classes-in-source-files#safelisting-specific-utilities)
### Next Steps:
diff --git a/assets/avatars/.DS_Store b/assets/avatars/.DS_Store
new file mode 100644
index 0000000..5008ddf
--- /dev/null
+++ b/assets/avatars/.DS_Store
Binary files differ
diff --git a/assets/avatars/bros/04a3e845-545a-4563-83e1-f7ccb34e34a9.png b/assets/avatars/bros/04a3e845-545a-4563-83e1-f7ccb34e34a9.png
new file mode 100644
index 0000000..ea6a222
--- /dev/null
+++ b/assets/avatars/bros/04a3e845-545a-4563-83e1-f7ccb34e34a9.png
Binary files differ
diff --git a/assets/avatars/bros/05bcc4c7-13b2-4242-a660-02d6609ebd25.png b/assets/avatars/bros/05bcc4c7-13b2-4242-a660-02d6609ebd25.png
new file mode 100644
index 0000000..a60584f
--- /dev/null
+++ b/assets/avatars/bros/05bcc4c7-13b2-4242-a660-02d6609ebd25.png
Binary files differ
diff --git a/assets/avatars/bros/149ccaed-89be-4064-991c-4e37f082cdd9.png b/assets/avatars/bros/149ccaed-89be-4064-991c-4e37f082cdd9.png
new file mode 100644
index 0000000..196fdab
--- /dev/null
+++ b/assets/avatars/bros/149ccaed-89be-4064-991c-4e37f082cdd9.png
Binary files differ
diff --git a/assets/avatars/bros/159173f1-1556-46cc-87c1-2cec9541f504.png b/assets/avatars/bros/159173f1-1556-46cc-87c1-2cec9541f504.png
new file mode 100644
index 0000000..ae74c1f
--- /dev/null
+++ b/assets/avatars/bros/159173f1-1556-46cc-87c1-2cec9541f504.png
Binary files differ
diff --git a/assets/avatars/bros/15ff72ea5cd7027a.jpg b/assets/avatars/bros/15ff72ea5cd7027a.jpg
new file mode 100644
index 0000000..bce6f1e
--- /dev/null
+++ b/assets/avatars/bros/15ff72ea5cd7027a.jpg
Binary files differ
diff --git a/assets/avatars/bros/1c92955d-cc23-4723-b2cd-04c7238d9cdc.png b/assets/avatars/bros/1c92955d-cc23-4723-b2cd-04c7238d9cdc.png
new file mode 100644
index 0000000..d96562a
--- /dev/null
+++ b/assets/avatars/bros/1c92955d-cc23-4723-b2cd-04c7238d9cdc.png
Binary files differ
diff --git a/assets/avatars/bros/1dff3587-75f1-47e5-bbfd-9c337b8c4c67.jpg b/assets/avatars/bros/1dff3587-75f1-47e5-bbfd-9c337b8c4c67.jpg
new file mode 100644
index 0000000..e14ca32
--- /dev/null
+++ b/assets/avatars/bros/1dff3587-75f1-47e5-bbfd-9c337b8c4c67.jpg
Binary files differ
diff --git a/assets/avatars/bros/2b0c4931-7b3d-466d-8eea-aceb358f7d76.jpeg b/assets/avatars/bros/2b0c4931-7b3d-466d-8eea-aceb358f7d76.jpeg
new file mode 100644
index 0000000..a2f1c63
--- /dev/null
+++ b/assets/avatars/bros/2b0c4931-7b3d-466d-8eea-aceb358f7d76.jpeg
Binary files differ
diff --git a/assets/avatars/bros/2c920876-0a54-46cb-863b-ce489adebb7e.jpg b/assets/avatars/bros/2c920876-0a54-46cb-863b-ce489adebb7e.jpg
new file mode 100644
index 0000000..2ef4b56
--- /dev/null
+++ b/assets/avatars/bros/2c920876-0a54-46cb-863b-ce489adebb7e.jpg
Binary files differ
diff --git a/assets/avatars/bros/33da9fac-a4c4-4288-a54c-c6280c6220d3.png b/assets/avatars/bros/33da9fac-a4c4-4288-a54c-c6280c6220d3.png
new file mode 100644
index 0000000..a8d7da5
--- /dev/null
+++ b/assets/avatars/bros/33da9fac-a4c4-4288-a54c-c6280c6220d3.png
Binary files differ
diff --git a/assets/avatars/bros/3519be1d-df9e-4c60-8403-9c47499d84cb.png b/assets/avatars/bros/3519be1d-df9e-4c60-8403-9c47499d84cb.png
new file mode 100644
index 0000000..be681a8
--- /dev/null
+++ b/assets/avatars/bros/3519be1d-df9e-4c60-8403-9c47499d84cb.png
Binary files differ
diff --git a/assets/avatars/bros/3c28e55b-58c4-4d25-a76e-70b8239846d1.png b/assets/avatars/bros/3c28e55b-58c4-4d25-a76e-70b8239846d1.png
new file mode 100644
index 0000000..990d493
--- /dev/null
+++ b/assets/avatars/bros/3c28e55b-58c4-4d25-a76e-70b8239846d1.png
Binary files differ
diff --git a/assets/avatars/bros/3e432ff5-0e36-40e8-8706-5f238df7ebb0.jpeg b/assets/avatars/bros/3e432ff5-0e36-40e8-8706-5f238df7ebb0.jpeg
new file mode 100644
index 0000000..4478d79
--- /dev/null
+++ b/assets/avatars/bros/3e432ff5-0e36-40e8-8706-5f238df7ebb0.jpeg
Binary files differ
diff --git a/assets/avatars/bros/3e5ffe6f-6c7d-459e-8ea0-bedb85875eaa.png b/assets/avatars/bros/3e5ffe6f-6c7d-459e-8ea0-bedb85875eaa.png
new file mode 100644
index 0000000..de5368f
--- /dev/null
+++ b/assets/avatars/bros/3e5ffe6f-6c7d-459e-8ea0-bedb85875eaa.png
Binary files differ
diff --git a/assets/avatars/bros/49c0e107-d221-402f-9a42-16b531baa9ad.png b/assets/avatars/bros/49c0e107-d221-402f-9a42-16b531baa9ad.png
new file mode 100644
index 0000000..9484954
--- /dev/null
+++ b/assets/avatars/bros/49c0e107-d221-402f-9a42-16b531baa9ad.png
Binary files differ
diff --git a/assets/avatars/bros/4bcd672a-bc4b-4fc2-b122-e30c45ac15e5.jpg b/assets/avatars/bros/4bcd672a-bc4b-4fc2-b122-e30c45ac15e5.jpg
new file mode 100644
index 0000000..894591b
--- /dev/null
+++ b/assets/avatars/bros/4bcd672a-bc4b-4fc2-b122-e30c45ac15e5.jpg
Binary files differ
diff --git a/assets/avatars/bros/5a1d970a-2766-47c2-b9d2-425789faa52e.png b/assets/avatars/bros/5a1d970a-2766-47c2-b9d2-425789faa52e.png
new file mode 100644
index 0000000..7e5c5c4
--- /dev/null
+++ b/assets/avatars/bros/5a1d970a-2766-47c2-b9d2-425789faa52e.png
Binary files differ
diff --git a/assets/avatars/bros/5e94ccbd-50b3-408a-8019-af76f00f2e11.png b/assets/avatars/bros/5e94ccbd-50b3-408a-8019-af76f00f2e11.png
new file mode 100644
index 0000000..88a7899
--- /dev/null
+++ b/assets/avatars/bros/5e94ccbd-50b3-408a-8019-af76f00f2e11.png
Binary files differ
diff --git a/assets/avatars/bros/68faa862-4198-438b-8972-d88ba9806c06.png b/assets/avatars/bros/68faa862-4198-438b-8972-d88ba9806c06.png
new file mode 100644
index 0000000..1728ade
--- /dev/null
+++ b/assets/avatars/bros/68faa862-4198-438b-8972-d88ba9806c06.png
Binary files differ
diff --git a/assets/avatars/bros/69376d6b-b145-4edc-9277-aedc03de20d1.jpg b/assets/avatars/bros/69376d6b-b145-4edc-9277-aedc03de20d1.jpg
new file mode 100644
index 0000000..14d3869
--- /dev/null
+++ b/assets/avatars/bros/69376d6b-b145-4edc-9277-aedc03de20d1.jpg
Binary files differ
diff --git a/assets/avatars/bros/6a1f9f06-042d-4aca-a16e-7efec588757e.png b/assets/avatars/bros/6a1f9f06-042d-4aca-a16e-7efec588757e.png
new file mode 100644
index 0000000..2cbbec2
--- /dev/null
+++ b/assets/avatars/bros/6a1f9f06-042d-4aca-a16e-7efec588757e.png
Binary files differ
diff --git a/assets/avatars/bros/6ea7215f-116f-40f3-a45e-4f98f549bce2.jpg b/assets/avatars/bros/6ea7215f-116f-40f3-a45e-4f98f549bce2.jpg
new file mode 100644
index 0000000..e14ca32
--- /dev/null
+++ b/assets/avatars/bros/6ea7215f-116f-40f3-a45e-4f98f549bce2.jpg
Binary files differ
diff --git a/assets/avatars/bros/75e258d6-a850-4438-a2d5-f9a46c545c0b.png b/assets/avatars/bros/75e258d6-a850-4438-a2d5-f9a46c545c0b.png
new file mode 100644
index 0000000..a2ecbb8
--- /dev/null
+++ b/assets/avatars/bros/75e258d6-a850-4438-a2d5-f9a46c545c0b.png
Binary files differ
diff --git a/assets/avatars/bros/779d4203-0863-43df-b66f-5134d5a92d2e.png b/assets/avatars/bros/779d4203-0863-43df-b66f-5134d5a92d2e.png
new file mode 100644
index 0000000..d5361a1
--- /dev/null
+++ b/assets/avatars/bros/779d4203-0863-43df-b66f-5134d5a92d2e.png
Binary files differ
diff --git a/assets/avatars/bros/7c60fcdb-7164-4f8b-9b03-b4f70e029d80.png b/assets/avatars/bros/7c60fcdb-7164-4f8b-9b03-b4f70e029d80.png
new file mode 100644
index 0000000..d093533
--- /dev/null
+++ b/assets/avatars/bros/7c60fcdb-7164-4f8b-9b03-b4f70e029d80.png
Binary files differ
diff --git a/assets/avatars/bros/84b61747-4cc3-49b0-a646-baec96352f05.png b/assets/avatars/bros/84b61747-4cc3-49b0-a646-baec96352f05.png
new file mode 100644
index 0000000..cbd0ad3
--- /dev/null
+++ b/assets/avatars/bros/84b61747-4cc3-49b0-a646-baec96352f05.png
Binary files differ
diff --git a/assets/avatars/bros/86390603-1ca1-4ba2-a81b-def1fb82ab0b.png b/assets/avatars/bros/86390603-1ca1-4ba2-a81b-def1fb82ab0b.png
new file mode 100644
index 0000000..4c7f265
--- /dev/null
+++ b/assets/avatars/bros/86390603-1ca1-4ba2-a81b-def1fb82ab0b.png
Binary files differ
diff --git a/assets/avatars/bros/89da29c1-ae95-48ba-b954-6e690b56e19b.jpg b/assets/avatars/bros/89da29c1-ae95-48ba-b954-6e690b56e19b.jpg
new file mode 100644
index 0000000..4490f39
--- /dev/null
+++ b/assets/avatars/bros/89da29c1-ae95-48ba-b954-6e690b56e19b.jpg
Binary files differ
diff --git a/assets/avatars/bros/8df3a7b3-653f-4aae-a673-1cb3595564d2.png b/assets/avatars/bros/8df3a7b3-653f-4aae-a673-1cb3595564d2.png
new file mode 100644
index 0000000..c907e74
--- /dev/null
+++ b/assets/avatars/bros/8df3a7b3-653f-4aae-a673-1cb3595564d2.png
Binary files differ
diff --git a/assets/avatars/bros/904467df-9c43-419d-912b-1b83f712172c.png b/assets/avatars/bros/904467df-9c43-419d-912b-1b83f712172c.png
new file mode 100644
index 0000000..f8c327a
--- /dev/null
+++ b/assets/avatars/bros/904467df-9c43-419d-912b-1b83f712172c.png
Binary files differ
diff --git a/assets/avatars/bros/9afc3e65-4287-4e48-a4b3-01625e9b78a1.png b/assets/avatars/bros/9afc3e65-4287-4e48-a4b3-01625e9b78a1.png
new file mode 100644
index 0000000..d13da04
--- /dev/null
+++ b/assets/avatars/bros/9afc3e65-4287-4e48-a4b3-01625e9b78a1.png
Binary files differ
diff --git a/assets/avatars/bros/Ej5Ys-pUwAAjQ6-.jpeg b/assets/avatars/bros/Ej5Ys-pUwAAjQ6-.jpeg
new file mode 100644
index 0000000..128e4ea
--- /dev/null
+++ b/assets/avatars/bros/Ej5Ys-pUwAAjQ6-.jpeg
Binary files differ
diff --git a/assets/avatars/bros/a3d10289-4cdd-44c6-9d61-da7e760b2812.png b/assets/avatars/bros/a3d10289-4cdd-44c6-9d61-da7e760b2812.png
new file mode 100644
index 0000000..b50723d
--- /dev/null
+++ b/assets/avatars/bros/a3d10289-4cdd-44c6-9d61-da7e760b2812.png
Binary files differ
diff --git a/assets/avatars/bros/a60e5493-75a0-4c49-a060-1b0e88b19ad8.png b/assets/avatars/bros/a60e5493-75a0-4c49-a060-1b0e88b19ad8.png
new file mode 100644
index 0000000..3b681f6
--- /dev/null
+++ b/assets/avatars/bros/a60e5493-75a0-4c49-a060-1b0e88b19ad8.png
Binary files differ
diff --git a/assets/avatars/bros/ac3ac83e-96eb-49f5-b71c-856b23dc3ccc.png b/assets/avatars/bros/ac3ac83e-96eb-49f5-b71c-856b23dc3ccc.png
new file mode 100644
index 0000000..1afd8b2
--- /dev/null
+++ b/assets/avatars/bros/ac3ac83e-96eb-49f5-b71c-856b23dc3ccc.png
Binary files differ
diff --git a/assets/avatars/bros/bbe5f3a1-c893-4808-946f-3f567b834655.png b/assets/avatars/bros/bbe5f3a1-c893-4808-946f-3f567b834655.png
new file mode 100644
index 0000000..ec737a7
--- /dev/null
+++ b/assets/avatars/bros/bbe5f3a1-c893-4808-946f-3f567b834655.png
Binary files differ
diff --git a/assets/avatars/bros/chad.png b/assets/avatars/bros/chad.png
new file mode 100644
index 0000000..d055a84
--- /dev/null
+++ b/assets/avatars/bros/chad.png
Binary files differ
diff --git a/assets/avatars/bros/d0d8a2bb-284c-4b80-bd86-28f201ff2939.png b/assets/avatars/bros/d0d8a2bb-284c-4b80-bd86-28f201ff2939.png
new file mode 100644
index 0000000..15c4a00
--- /dev/null
+++ b/assets/avatars/bros/d0d8a2bb-284c-4b80-bd86-28f201ff2939.png
Binary files differ
diff --git a/assets/avatars/bros/d0f68378-38a2-45c6-af27-c5748d87736e.png b/assets/avatars/bros/d0f68378-38a2-45c6-af27-c5748d87736e.png
new file mode 100644
index 0000000..4d89b1e
--- /dev/null
+++ b/assets/avatars/bros/d0f68378-38a2-45c6-af27-c5748d87736e.png
Binary files differ
diff --git a/assets/avatars/bros/daaf0fc3-b344-448f-b9f0-6ee95b262521.png b/assets/avatars/bros/daaf0fc3-b344-448f-b9f0-6ee95b262521.png
new file mode 100644
index 0000000..cc4fbb4
--- /dev/null
+++ b/assets/avatars/bros/daaf0fc3-b344-448f-b9f0-6ee95b262521.png
Binary files differ
diff --git a/assets/avatars/bros/e1c40fb4-ff6f-42dd-9ea0-540504999b60.png b/assets/avatars/bros/e1c40fb4-ff6f-42dd-9ea0-540504999b60.png
new file mode 100644
index 0000000..505e6a2
--- /dev/null
+++ b/assets/avatars/bros/e1c40fb4-ff6f-42dd-9ea0-540504999b60.png
Binary files differ
diff --git a/assets/avatars/bros/ea72e0f8-5a83-4b51-9b49-ea3f56509d8e.jpg b/assets/avatars/bros/ea72e0f8-5a83-4b51-9b49-ea3f56509d8e.jpg
new file mode 100644
index 0000000..0a1c176
--- /dev/null
+++ b/assets/avatars/bros/ea72e0f8-5a83-4b51-9b49-ea3f56509d8e.jpg
Binary files differ
diff --git a/assets/avatars/bros/ee6f2951-dc28-4b59-b54d-553944e8ea87.png b/assets/avatars/bros/ee6f2951-dc28-4b59-b54d-553944e8ea87.png
new file mode 100644
index 0000000..65c8cdc
--- /dev/null
+++ b/assets/avatars/bros/ee6f2951-dc28-4b59-b54d-553944e8ea87.png
Binary files differ
diff --git a/assets/avatars/bros/f6c04eb5-4741-4882-ae2c-7b0b49f66502.jpg b/assets/avatars/bros/f6c04eb5-4741-4882-ae2c-7b0b49f66502.jpg
new file mode 100644
index 0000000..4f6774d
--- /dev/null
+++ b/assets/avatars/bros/f6c04eb5-4741-4882-ae2c-7b0b49f66502.jpg
Binary files differ
diff --git a/assets/avatars/bros/fd8b2219-7435-4fc3-9722-a82370be2001.jpg b/assets/avatars/bros/fd8b2219-7435-4fc3-9722-a82370be2001.jpg
new file mode 100644
index 0000000..4f6774d
--- /dev/null
+++ b/assets/avatars/bros/fd8b2219-7435-4fc3-9722-a82370be2001.jpg
Binary files differ
diff --git a/assets/avatars/memes/Affirmative-Fed-Boi-Chad.png b/assets/avatars/memes/Affirmative-Fed-Boi-Chad.png
new file mode 100644
index 0000000..96cb415
--- /dev/null
+++ b/assets/avatars/memes/Affirmative-Fed-Boi-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Bashar-Al-Assad-Chad.png b/assets/avatars/memes/Bashar-Al-Assad-Chad.png
new file mode 100644
index 0000000..f19b84c
--- /dev/null
+++ b/assets/avatars/memes/Bashar-Al-Assad-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Buddhist-Chad.png b/assets/avatars/memes/Buddhist-Chad.png
new file mode 100644
index 0000000..10544e5
--- /dev/null
+++ b/assets/avatars/memes/Buddhist-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Chad-No-Nut.png b/assets/avatars/memes/Chad-No-Nut.png
new file mode 100644
index 0000000..f760199
--- /dev/null
+++ b/assets/avatars/memes/Chad-No-Nut.png
Binary files differ
diff --git a/assets/avatars/memes/Crusade-Chad.png b/assets/avatars/memes/Crusade-Chad.png
new file mode 100644
index 0000000..c3914fa
--- /dev/null
+++ b/assets/avatars/memes/Crusade-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Frenchman-Chad.png b/assets/avatars/memes/Frenchman-Chad.png
new file mode 100644
index 0000000..2afc7be
--- /dev/null
+++ b/assets/avatars/memes/Frenchman-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/German-Soldier-Chad.png b/assets/avatars/memes/German-Soldier-Chad.png
new file mode 100644
index 0000000..8db33eb
--- /dev/null
+++ b/assets/avatars/memes/German-Soldier-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Hitler-Chad.png b/assets/avatars/memes/Hitler-Chad.png
new file mode 100644
index 0000000..71dcb12
--- /dev/null
+++ b/assets/avatars/memes/Hitler-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Hype-Beast-Chad.png b/assets/avatars/memes/Hype-Beast-Chad.png
new file mode 100644
index 0000000..38e8730
--- /dev/null
+++ b/assets/avatars/memes/Hype-Beast-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Jew-Chad.png b/assets/avatars/memes/Jew-Chad.png
new file mode 100644
index 0000000..83396d5
--- /dev/null
+++ b/assets/avatars/memes/Jew-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Joker-Chad.png b/assets/avatars/memes/Joker-Chad.png
new file mode 100644
index 0000000..e10b88a
--- /dev/null
+++ b/assets/avatars/memes/Joker-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/King-Harkinian-Chad.png b/assets/avatars/memes/King-Harkinian-Chad.png
new file mode 100644
index 0000000..9c0af9e
--- /dev/null
+++ b/assets/avatars/memes/King-Harkinian-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Military-Chad.png b/assets/avatars/memes/Military-Chad.png
new file mode 100644
index 0000000..acd36b6
--- /dev/null
+++ b/assets/avatars/memes/Military-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Nazbol-Chad.png b/assets/avatars/memes/Nazbol-Chad.png
new file mode 100644
index 0000000..ece3ad4
--- /dev/null
+++ b/assets/avatars/memes/Nazbol-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Nordic-Chad-No-Beard-Black-HEadset.png b/assets/avatars/memes/Nordic-Chad-No-Beard-Black-HEadset.png
new file mode 100644
index 0000000..65dcc9c
--- /dev/null
+++ b/assets/avatars/memes/Nordic-Chad-No-Beard-Black-HEadset.png
Binary files differ
diff --git a/assets/avatars/memes/Portugeuse-Chad.png b/assets/avatars/memes/Portugeuse-Chad.png
new file mode 100644
index 0000000..107fdf9
--- /dev/null
+++ b/assets/avatars/memes/Portugeuse-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Red-Headed-Gamer-Chad.png b/assets/avatars/memes/Red-Headed-Gamer-Chad.png
new file mode 100644
index 0000000..8882724
--- /dev/null
+++ b/assets/avatars/memes/Red-Headed-Gamer-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Saudi-Arabian-Chad.png b/assets/avatars/memes/Saudi-Arabian-Chad.png
new file mode 100644
index 0000000..a3ba541
--- /dev/null
+++ b/assets/avatars/memes/Saudi-Arabian-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Suited-Chad.png b/assets/avatars/memes/Suited-Chad.png
new file mode 100644
index 0000000..a97aab2
--- /dev/null
+++ b/assets/avatars/memes/Suited-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/Trump-Chad.png b/assets/avatars/memes/Trump-Chad.png
new file mode 100644
index 0000000..49b68d3
--- /dev/null
+++ b/assets/avatars/memes/Trump-Chad.png
Binary files differ
diff --git a/assets/avatars/memes/gigachad.png b/assets/avatars/memes/gigachad.png
new file mode 100644
index 0000000..aa5945b
--- /dev/null
+++ b/assets/avatars/memes/gigachad.png
Binary files differ
diff --git a/assets/avatars/memes/wojak-cry.jpeg b/assets/avatars/memes/wojak-cry.jpeg
new file mode 100644
index 0000000..65e2b86
--- /dev/null
+++ b/assets/avatars/memes/wojak-cry.jpeg
Binary files differ
diff --git a/assets/board/boards/AI.svg b/assets/board/boards/AI.svg
new file mode 100644
index 0000000..9449d06
--- /dev/null
+++ b/assets/board/boards/AI.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.2" baseProfile="tiny" x="0px" y="0px" viewBox="0 0 100 100" xml:space="preserve"><path d="M92.3278809,46.5915833c-0.1083984,0-0.2158203,0.0037842-0.3225098,0.010376l-3.6612549-13.5776978 c1.6922607-0.8509521,2.8563232-2.6035767,2.8563232-4.623291c0-2.8518066-2.3203125-5.1721191-5.1721191-5.1721191 c-1.4447021,0-2.7528076,0.5957031-3.6921387,1.5541992l-10.6931152-6.9154053 c0.2296143-0.5844116,0.355835-1.2203979,0.355835-1.8852539c0-2.8517456-2.3204346-5.1721191-5.1721191-5.1721191 c-2.315918,0-4.2813721,1.5303955-4.9382324,3.6328735l-13.883667-1.4083862 c-0.2600098-2.6102905-2.4688721-4.6557617-5.1464844-4.6557617c-2.8516846,0-5.1721191,2.3203735-5.1721191,5.1721191 c0,0.2208252,0.0140381,0.4384766,0.0410156,0.6520996L22.947998,19.2227478 c-0.8984375-1.532959-2.5635986-2.5646973-4.465332-2.5646973c-2.8516846,0-5.1721191,2.3198242-5.1721191,5.1716309 c0,1.536499,0.6739502,2.918396,1.7412109,3.8665771l-5.7349854,9.9091797 c-0.5169678-0.1738281-1.0699463-0.2681885-1.6446533-0.2681885C4.8203125,35.3372498,2.5,37.6576233,2.5,40.5093689 c0,2.8518066,2.3203125,5.1721191,5.1721191,5.1721191c0.3548584,0,0.7015381-0.0360107,1.036499-0.1044312l4.3067627,10.1087646 c-1.3500977,0.9342651-2.2363281,2.4932861-2.2363281,4.2555542c0,2.8518066,2.3203125,5.1721191,5.1721191,5.1721191 c1.6469727,0,3.1164551-0.7739258,4.064209-1.9772339l7.4414063,3.7341919 c-0.1165771,0.430542-0.1791992,0.8830566-0.1791992,1.3499756c0,2.8517456,2.3203125,5.1721191,5.1721191,5.1721191 s5.1721191-2.3203735,5.1721191-5.1721191c0-0.0292969-0.0006104-0.0585327-0.0010986-0.0877075l8.7926025-1.9473877 c0.8077393,1.8059692,2.6213379,3.067688,4.7241211,3.067688c0.7336426,0,1.4316406-0.1538696,2.0644531-0.4304199 l9.8706055,14.0726929c-0.8782959,0.9273682-1.4178467,2.1786499-1.4178467,3.5535889 c0,2.8517456,2.3204346,5.1721191,5.1721191,5.1721191s5.1721191-2.3203735,5.1721191-5.1721191 c0-1.7834473-0.9075928-3.3590088-2.2850342-4.2892456l4.4125977-10.6917114 c0.3171387,0.0609741,0.6442871,0.0933228,0.9787598,0.0933228c2.8518066,0,5.1721191-2.3203125,5.1721191-5.1721191 c0-0.9030762-0.2329102-1.7527466-0.6414795-2.4924316l9.4993896-8.0668945 c0.8798828,0.6922607,1.9888916,1.1055298,3.192627,1.1055298c2.8518066,0,5.1721191-2.3198242,5.1721191-5.1716309 C97.5,48.9119568,95.1796875,46.5915833,92.3278809,46.5915833z M86.0283203,25.2940369 c1.7133789,0,3.1069336,1.3936157,3.1069336,3.1069336c0,1.7127686-1.3935547,3.1063843-3.1069336,3.1063843 c-1.7132568,0-3.1069336-1.3936157-3.1069336-3.1063843C82.9213867,26.6876526,84.3150635,25.2940369,86.0283203,25.2940369z M82.3847656,32.0677185c0.3671875,0.3648682,0.7888184,0.6749268,1.2513428,0.9172363L75.513916,61.2331238 c-0.1348877-0.0105591-0.2711182-0.0161133-0.4086914-0.0161133c-0.203125,0-0.4033203,0.012146-0.6003418,0.0350342 L69.388916,45.6771545c1.5578613-0.8920288,2.6099854-2.5709229,2.6099854-4.4911499 c0-0.6891479-0.1358643-1.3471069-0.3817139-1.9489136L82.3847656,32.0677185z M66.8267822,44.29245 c-1.7132568,0-3.1068115-1.3936157-3.1068115-3.1064453c0-1.7132568,1.3935547-3.1068726,3.1068115-3.1068726 s3.1068115,1.3936157,3.1068115,3.1068726C69.9335938,42.8988342,68.5400391,44.29245,66.8267822,44.29245z M70.5189209,19.6003113 l10.6932373,6.9154053c-0.2296143,0.5844116-0.355957,1.2203979-0.355957,1.8852539 c0,0.689209,0.1359863,1.3471069,0.3817139,1.9489136l-10.767334,7.1692505 c-0.7027588-0.6983643-1.604248-1.1967773-2.6112061-1.4016113V21.0508728 C68.8896484,20.8412781,69.8094482,20.3242493,70.5189209,19.6003113z M66.8267822,12.8755188 c1.7132568,0,3.1068115,1.3936157,3.1068115,3.1068726c0,1.7133179-1.3935547,3.1069336-3.1068115,3.1069336 s-3.1068115-1.3936157-3.1068115-3.1069336C63.7199707,14.2691345,65.1135254,12.8755188,66.8267822,12.8755188z M63.6408691,20.0540466c0.6201172,0.4862061,1.3535156,0.8341064,2.1533203,0.9968262v15.0666504 c-0.7746582,0.1575928-1.4868164,0.4890747-2.0939941,0.9514771l-6.9552002-6.1027222 c0.43396-0.7564697,0.6824951-1.6323853,0.6824951-2.5653076c0-0.9064941-0.2348633-1.7590332-0.6462402-2.5006714 L63.6408691,20.0540466z M46.0107422,43.526886l4.9464111-10.1193848c0.414917,0.107666,0.8499756,0.1650391,1.2982178,0.1650391 c1.1738281,0,2.2575684-0.3933716,3.126709-1.0548706l6.9550781,6.1026611 c-0.434082,0.7565918-0.6824951,1.6326904-0.6824951,2.5656738c0,1.3953857,0.5557861,2.663208,1.4572754,3.5944214 l-9.9616699,14.5361328c-0.6190186-0.2625122-1.2991943-0.4077759-2.0128174-0.4077759 c-0.46875,0-0.9228516,0.0630493-1.3549805,0.180481l-3.7248535-7.4038696 c1.2009277-0.947998,1.9729004-2.4161377,1.9729004-4.0611572C48.0305176,45.9579773,47.2382813,44.4734802,46.0107422,43.526886z M44.1567383,42.6172791c-0.4150391-0.107666-0.8500977-0.1651611-1.2983398-0.1651611 c-1.5163574,0-2.8825684,0.6560669-3.8294678,1.6993408l-5.833374-3.4614258 c0.1855469-0.5322266,0.2867432-1.1036377,0.2867432-1.6983032c0-1.5460205-0.682251-2.9356689-1.7611084-3.8842773 l9.5179443-16.644165c0.5096436,0.168457,1.0540771,0.2599487,1.6192627,0.2599487 c0.6468506,0,1.2661133-0.1196899,1.8374023-0.3375244l3.9785156,6.2872925 c-0.9798584,0.9417725-1.5905762,2.2648315-1.5905762,3.7279663c0,1.6661987,0.7921143,3.1505737,2.0194092,4.0969849 L44.1567383,42.6172791z M45.965332,47.6242371c0,1.7132568-1.3935547,3.1068726-3.1069336,3.1068726 c-1.7131348,0-3.1068115-1.3936157-3.1068115-3.1068726c0-1.7133179,1.3936768-3.1069336,3.1068115-3.1069336 C44.5717773,44.5173035,45.965332,45.9109192,45.965332,47.6242371z M49.1489258,28.4009705 c0-1.7133179,1.3935547-3.1069336,3.1064453-3.1069336c1.7131348,0,3.1068115,1.3936157,3.1068115,3.1069336 c0,1.7127686-1.3936768,3.1063843-3.1068115,3.1063843C50.5424805,31.5073547,49.1489258,30.113739,49.1489258,28.4009705z M47.796875,15.0899353l13.8834229,1.4084473c0.0709229,0.7139282,0.2880859,1.385376,0.6204834,1.9844971l-6.8598633,5.8463135 c-0.8786621-0.6890259-1.9851074-1.1003418-3.1855469-1.1003418c-0.6467285,0-1.2658691,0.1196899-1.8371582,0.3374634 l-3.9783936-6.2872925C47.0610352,16.6820984,47.5339355,15.9319153,47.796875,15.0899353z M42.8583984,10.4442444 c1.7133789,0,3.1069336,1.3936157,3.1069336,3.1068726c0,1.7133179-1.3935547,3.1069336-3.1069336,3.1069336 c-1.7131348,0-3.1068115-1.3936157-3.1068115-3.1069336C39.7515869,11.8378601,41.1452637,10.4442444,42.8583984,10.4442444z M23.6547852,21.8296814c0-0.2208252-0.013916-0.4384766-0.0408936-0.6520996l14.7791748-5.0194702 c0.2816162,0.4804688,0.6385498,0.9116821,1.0544434,1.2773438l-9.5179443,16.644104 c-0.5096436-0.168457-1.0540771-0.2599487-1.6193848-0.2599487c-0.5665283,0-1.1121826,0.0919189-1.6226807,0.2610474 l-4.791748-8.3683472C22.9735107,24.7637024,23.6547852,23.3747864,23.6547852,21.8296814z M31.4169922,38.9917297 c0,1.7133179-1.3935547,3.1069336-3.1068115,3.1069336s-3.1069336-1.3936157-3.1069336-3.1069336 c0-1.7132568,1.3936768-3.1068726,3.1069336-3.1068726S31.4169922,37.2784729,31.4169922,38.9917297z M18.482666,18.7232361 c1.7133789,0,3.1069336,1.3936768,3.1069336,3.1064453c0,1.7132568-1.3935547,3.1068726-3.1069336,3.1068726 c-1.7131348,0-3.1068115-1.3936157-3.1068115-3.1068726C15.3758545,20.1169128,16.7695313,18.7232361,18.482666,18.7232361z M7.6721191,43.6163025c-1.7132568,0-3.1069336-1.3936157-3.1069336-3.1069336c0-1.7132568,1.3936768-3.1068726,3.1069336-3.1068726 s3.1069336,1.3936157,3.1069336,3.1068726C10.7790527,42.2226868,9.385376,43.6163025,7.6721191,43.6163025z M10.6075439,44.7652283 c1.3502197-0.9342041,2.2366943-2.4934082,2.2366943-4.2558594c0-1.536438-0.6738281-2.918396-1.7412109-3.8665771 l5.7351074-9.9091797c0.5168457,0.1738281,1.0699463,0.2681885,1.6445313,0.2681885 c0.5664063,0,1.1118164-0.0917969,1.6223145-0.2608643l4.791748,8.3685303 c-1.0775146,0.9486084-1.758667,2.3373413-1.758667,3.8822632c0,1.5209961,0.6601563,2.890686,1.7088623,3.8379517 l-7.210083,12.2219238c-0.5286865-0.1828003-1.0957031-0.2823486-1.6856689-0.2823486 c-0.3551025,0-0.7019043,0.0360107-1.0369873,0.1044922L10.6075439,44.7652283z M15.9511719,63.0483093 c-1.7133789,0-3.1069336-1.3936157-3.1069336-3.1069336c0-1.7132568,1.3935547-3.1068726,3.1069336-3.1068726 c1.7127686,0,3.1064453,1.3936157,3.1064453,3.1068726C19.0576172,61.6546936,17.6639404,63.0483093,15.9511719,63.0483093z M19.4143066,56.1036072l7.2102051-12.2221069c0.5285645,0.1827393,1.0957031,0.2823486,1.6856689,0.2823486 c1.5164795,0,2.8825684-0.6560669,3.8294678-1.6992798l5.8334961,3.4614868 c-0.1855469,0.5322266-0.2868652,1.1035767-0.2868652,1.6981812c0,0.4024658,0.0463867,0.7943726,0.1337891,1.1706543 l-17.6929932,8.0992432C19.9168701,56.606842,19.6779785,56.3418274,19.4143066,56.1036072z M32.449707,71.327301 c-1.7133789,0-3.1069336-1.3936157-3.1069336-3.1068726c0-1.7133179,1.3935547-3.1069336,3.1069336-3.1069336 c1.7132568,0,3.1069336,1.3936157,3.1069336,3.1069336C35.5566406,69.9336853,34.1629639,71.327301,32.449707,71.327301z M45.965332,64.0809021c0,0.0292969,0.0007324,0.0584717,0.0012207,0.0876465l-8.7927246,1.9474487 c-0.8077393-1.8059692-2.6213379-3.067688-4.7241211-3.067688c-1.6472168,0-3.1169434,0.7741089-4.0646973,1.9775391 l-7.4414063-3.7342529c0.1165771-0.430603,0.1791992-0.8832397,0.1791992-1.3502197 c0-0.4025879-0.0463867-0.7944946-0.1337891-1.1708374l17.6931152-8.0993042 c0.9416504,1.2872314,2.4628906,2.1251221,4.1762695,2.1251221c0.46875,0,0.9230957-0.0630493,1.3552246-0.180481 l3.7247314,7.4038696C46.7375488,60.9677429,45.965332,62.4358826,45.965332,64.0809021z M51.1374512,67.1878357 c-1.7132568,0-3.1069336-1.3936768-3.1069336-3.1069336s1.3936768-3.1068726,3.1069336-3.1068726 c1.7133789,0,3.1069336,1.3936157,3.1069336,3.1068726S52.8508301,67.1878357,51.1374512,67.1878357z M64.8139648,45.9498596 c0.6188965,0.2624512,1.2993164,0.4077759,2.0128174,0.4077759c0.2030029,0,0.4031982-0.012146,0.6002197-0.0350342 l5.1159668,15.5751953c-1.1304932,0.647583-1.9941406,1.7096558-2.3830566,2.977417L56.28125,63.5386658 c-0.1235352-1.1801147-0.645752-2.2433472-1.4289551-3.0524902L64.8139648,45.9498596z M69.9335938,86.4488831 c0,1.7132568-1.3935547,3.1068726-3.1068115,3.1068726s-3.1068115-1.3936157-3.1068115-3.1068726 s1.3935547-3.1068726,3.1068115-3.1068726S69.9335938,84.7356262,69.9335938,86.4488831z M67.8059082,81.3701477 c-0.3171387-0.0610352-0.6445313-0.0933838-0.979126-0.0933838c-0.7335205,0-1.4318848,0.1538696-2.0646973,0.430542 l-9.8704834-14.0725708c0.5421143-0.5723267,0.9550781-1.2678833,1.1918945-2.039917l13.87854,1.3364868 c0.1629639,1.5579834,1.0203857,2.9124756,2.2564697,3.7471924L67.8059082,81.3701477z M75.1052246,69.4960632 c-1.7126465,0-3.1063232-1.3936157-3.1063232-3.1069336c0-1.7132568,1.3936768-3.1068726,3.1063232-3.1068726 c1.7133789,0,3.1069336,1.3936157,3.1069336,3.1068726C78.2121582,68.1024475,76.8186035,69.4960632,75.1052246,69.4960632z M87.1557617,51.7637024c0,0.9031982,0.2329102,1.7528076,0.6416016,2.4924927l-9.4991455,8.0667725 c-0.2492676-0.196167-0.5170898-0.3696899-0.8001709-0.5180054l8.1223145-28.2484741 c0.1347656,0.0105591,0.270752,0.0160522,0.407959,0.0160522c0.1082764,0,0.2155762-0.0037231,0.3222656-0.0103149 l3.661377,13.5778809C88.3198242,47.9912415,87.1557617,49.7440491,87.1557617,51.7637024z M92.3278809,54.8700867 c-1.7132568,0-3.1069336-1.3936157-3.1069336-3.1063843c0-1.7132568,1.3936768-3.1068726,3.1069336-3.1068726 s3.1069336,1.3936157,3.1069336,3.1068726C95.4348145,53.4764709,94.0411377,54.8700867,92.3278809,54.8700867z"/></svg>
diff --git a/assets/board/boards/ai.svg b/assets/board/boards/ai.svg
new file mode 100644
index 0000000..c38dc1f
--- /dev/null
+++ b/assets/board/boards/ai.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.2" baseProfile="tiny" x="0px" y="0px" viewBox="0 0 100 125" xml:space="preserve"><path d="M92.3278809,46.5915833c-0.1083984,0-0.2158203,0.0037842-0.3225098,0.010376l-3.6612549-13.5776978 c1.6922607-0.8509521,2.8563232-2.6035767,2.8563232-4.623291c0-2.8518066-2.3203125-5.1721191-5.1721191-5.1721191 c-1.4447021,0-2.7528076,0.5957031-3.6921387,1.5541992l-10.6931152-6.9154053 c0.2296143-0.5844116,0.355835-1.2203979,0.355835-1.8852539c0-2.8517456-2.3204346-5.1721191-5.1721191-5.1721191 c-2.315918,0-4.2813721,1.5303955-4.9382324,3.6328735l-13.883667-1.4083862 c-0.2600098-2.6102905-2.4688721-4.6557617-5.1464844-4.6557617c-2.8516846,0-5.1721191,2.3203735-5.1721191,5.1721191 c0,0.2208252,0.0140381,0.4384766,0.0410156,0.6520996L22.947998,19.2227478 c-0.8984375-1.532959-2.5635986-2.5646973-4.465332-2.5646973c-2.8516846,0-5.1721191,2.3198242-5.1721191,5.1716309 c0,1.536499,0.6739502,2.918396,1.7412109,3.8665771l-5.7349854,9.9091797 c-0.5169678-0.1738281-1.0699463-0.2681885-1.6446533-0.2681885C4.8203125,35.3372498,2.5,37.6576233,2.5,40.5093689 c0,2.8518066,2.3203125,5.1721191,5.1721191,5.1721191c0.3548584,0,0.7015381-0.0360107,1.036499-0.1044312l4.3067627,10.1087646 c-1.3500977,0.9342651-2.2363281,2.4932861-2.2363281,4.2555542c0,2.8518066,2.3203125,5.1721191,5.1721191,5.1721191 c1.6469727,0,3.1164551-0.7739258,4.064209-1.9772339l7.4414063,3.7341919 c-0.1165771,0.430542-0.1791992,0.8830566-0.1791992,1.3499756c0,2.8517456,2.3203125,5.1721191,5.1721191,5.1721191 s5.1721191-2.3203735,5.1721191-5.1721191c0-0.0292969-0.0006104-0.0585327-0.0010986-0.0877075l8.7926025-1.9473877 c0.8077393,1.8059692,2.6213379,3.067688,4.7241211,3.067688c0.7336426,0,1.4316406-0.1538696,2.0644531-0.4304199 l9.8706055,14.0726929c-0.8782959,0.9273682-1.4178467,2.1786499-1.4178467,3.5535889 c0,2.8517456,2.3204346,5.1721191,5.1721191,5.1721191s5.1721191-2.3203735,5.1721191-5.1721191 c0-1.7834473-0.9075928-3.3590088-2.2850342-4.2892456l4.4125977-10.6917114 c0.3171387,0.0609741,0.6442871,0.0933228,0.9787598,0.0933228c2.8518066,0,5.1721191-2.3203125,5.1721191-5.1721191 c0-0.9030762-0.2329102-1.7527466-0.6414795-2.4924316l9.4993896-8.0668945 c0.8798828,0.6922607,1.9888916,1.1055298,3.192627,1.1055298c2.8518066,0,5.1721191-2.3198242,5.1721191-5.1716309 C97.5,48.9119568,95.1796875,46.5915833,92.3278809,46.5915833z M86.0283203,25.2940369 c1.7133789,0,3.1069336,1.3936157,3.1069336,3.1069336c0,1.7127686-1.3935547,3.1063843-3.1069336,3.1063843 c-1.7132568,0-3.1069336-1.3936157-3.1069336-3.1063843C82.9213867,26.6876526,84.3150635,25.2940369,86.0283203,25.2940369z M82.3847656,32.0677185c0.3671875,0.3648682,0.7888184,0.6749268,1.2513428,0.9172363L75.513916,61.2331238 c-0.1348877-0.0105591-0.2711182-0.0161133-0.4086914-0.0161133c-0.203125,0-0.4033203,0.012146-0.6003418,0.0350342 L69.388916,45.6771545c1.5578613-0.8920288,2.6099854-2.5709229,2.6099854-4.4911499 c0-0.6891479-0.1358643-1.3471069-0.3817139-1.9489136L82.3847656,32.0677185z M66.8267822,44.29245 c-1.7132568,0-3.1068115-1.3936157-3.1068115-3.1064453c0-1.7132568,1.3935547-3.1068726,3.1068115-3.1068726 s3.1068115,1.3936157,3.1068115,3.1068726C69.9335938,42.8988342,68.5400391,44.29245,66.8267822,44.29245z M70.5189209,19.6003113 l10.6932373,6.9154053c-0.2296143,0.5844116-0.355957,1.2203979-0.355957,1.8852539 c0,0.689209,0.1359863,1.3471069,0.3817139,1.9489136l-10.767334,7.1692505 c-0.7027588-0.6983643-1.604248-1.1967773-2.6112061-1.4016113V21.0508728 C68.8896484,20.8412781,69.8094482,20.3242493,70.5189209,19.6003113z M66.8267822,12.8755188 c1.7132568,0,3.1068115,1.3936157,3.1068115,3.1068726c0,1.7133179-1.3935547,3.1069336-3.1068115,3.1069336 s-3.1068115-1.3936157-3.1068115-3.1069336C63.7199707,14.2691345,65.1135254,12.8755188,66.8267822,12.8755188z M63.6408691,20.0540466c0.6201172,0.4862061,1.3535156,0.8341064,2.1533203,0.9968262v15.0666504 c-0.7746582,0.1575928-1.4868164,0.4890747-2.0939941,0.9514771l-6.9552002-6.1027222 c0.43396-0.7564697,0.6824951-1.6323853,0.6824951-2.5653076c0-0.9064941-0.2348633-1.7590332-0.6462402-2.5006714 L63.6408691,20.0540466z M46.0107422,43.526886l4.9464111-10.1193848c0.414917,0.107666,0.8499756,0.1650391,1.2982178,0.1650391 c1.1738281,0,2.2575684-0.3933716,3.126709-1.0548706l6.9550781,6.1026611 c-0.434082,0.7565918-0.6824951,1.6326904-0.6824951,2.5656738c0,1.3953857,0.5557861,2.663208,1.4572754,3.5944214 l-9.9616699,14.5361328c-0.6190186-0.2625122-1.2991943-0.4077759-2.0128174-0.4077759 c-0.46875,0-0.9228516,0.0630493-1.3549805,0.180481l-3.7248535-7.4038696 c1.2009277-0.947998,1.9729004-2.4161377,1.9729004-4.0611572C48.0305176,45.9579773,47.2382813,44.4734802,46.0107422,43.526886z M44.1567383,42.6172791c-0.4150391-0.107666-0.8500977-0.1651611-1.2983398-0.1651611 c-1.5163574,0-2.8825684,0.6560669-3.8294678,1.6993408l-5.833374-3.4614258 c0.1855469-0.5322266,0.2867432-1.1036377,0.2867432-1.6983032c0-1.5460205-0.682251-2.9356689-1.7611084-3.8842773 l9.5179443-16.644165c0.5096436,0.168457,1.0540771,0.2599487,1.6192627,0.2599487 c0.6468506,0,1.2661133-0.1196899,1.8374023-0.3375244l3.9785156,6.2872925 c-0.9798584,0.9417725-1.5905762,2.2648315-1.5905762,3.7279663c0,1.6661987,0.7921143,3.1505737,2.0194092,4.0969849 L44.1567383,42.6172791z M45.965332,47.6242371c0,1.7132568-1.3935547,3.1068726-3.1069336,3.1068726 c-1.7131348,0-3.1068115-1.3936157-3.1068115-3.1068726c0-1.7133179,1.3936768-3.1069336,3.1068115-3.1069336 C44.5717773,44.5173035,45.965332,45.9109192,45.965332,47.6242371z M49.1489258,28.4009705 c0-1.7133179,1.3935547-3.1069336,3.1064453-3.1069336c1.7131348,0,3.1068115,1.3936157,3.1068115,3.1069336 c0,1.7127686-1.3936768,3.1063843-3.1068115,3.1063843C50.5424805,31.5073547,49.1489258,30.113739,49.1489258,28.4009705z M47.796875,15.0899353l13.8834229,1.4084473c0.0709229,0.7139282,0.2880859,1.385376,0.6204834,1.9844971l-6.8598633,5.8463135 c-0.8786621-0.6890259-1.9851074-1.1003418-3.1855469-1.1003418c-0.6467285,0-1.2658691,0.1196899-1.8371582,0.3374634 l-3.9783936-6.2872925C47.0610352,16.6820984,47.5339355,15.9319153,47.796875,15.0899353z M42.8583984,10.4442444 c1.7133789,0,3.1069336,1.3936157,3.1069336,3.1068726c0,1.7133179-1.3935547,3.1069336-3.1069336,3.1069336 c-1.7131348,0-3.1068115-1.3936157-3.1068115-3.1069336C39.7515869,11.8378601,41.1452637,10.4442444,42.8583984,10.4442444z M23.6547852,21.8296814c0-0.2208252-0.013916-0.4384766-0.0408936-0.6520996l14.7791748-5.0194702 c0.2816162,0.4804688,0.6385498,0.9116821,1.0544434,1.2773438l-9.5179443,16.644104 c-0.5096436-0.168457-1.0540771-0.2599487-1.6193848-0.2599487c-0.5665283,0-1.1121826,0.0919189-1.6226807,0.2610474 l-4.791748-8.3683472C22.9735107,24.7637024,23.6547852,23.3747864,23.6547852,21.8296814z M31.4169922,38.9917297 c0,1.7133179-1.3935547,3.1069336-3.1068115,3.1069336s-3.1069336-1.3936157-3.1069336-3.1069336 c0-1.7132568,1.3936768-3.1068726,3.1069336-3.1068726S31.4169922,37.2784729,31.4169922,38.9917297z M18.482666,18.7232361 c1.7133789,0,3.1069336,1.3936768,3.1069336,3.1064453c0,1.7132568-1.3935547,3.1068726-3.1069336,3.1068726 c-1.7131348,0-3.1068115-1.3936157-3.1068115-3.1068726C15.3758545,20.1169128,16.7695313,18.7232361,18.482666,18.7232361z M7.6721191,43.6163025c-1.7132568,0-3.1069336-1.3936157-3.1069336-3.1069336c0-1.7132568,1.3936768-3.1068726,3.1069336-3.1068726 s3.1069336,1.3936157,3.1069336,3.1068726C10.7790527,42.2226868,9.385376,43.6163025,7.6721191,43.6163025z M10.6075439,44.7652283 c1.3502197-0.9342041,2.2366943-2.4934082,2.2366943-4.2558594c0-1.536438-0.6738281-2.918396-1.7412109-3.8665771 l5.7351074-9.9091797c0.5168457,0.1738281,1.0699463,0.2681885,1.6445313,0.2681885 c0.5664063,0,1.1118164-0.0917969,1.6223145-0.2608643l4.791748,8.3685303 c-1.0775146,0.9486084-1.758667,2.3373413-1.758667,3.8822632c0,1.5209961,0.6601563,2.890686,1.7088623,3.8379517 l-7.210083,12.2219238c-0.5286865-0.1828003-1.0957031-0.2823486-1.6856689-0.2823486 c-0.3551025,0-0.7019043,0.0360107-1.0369873,0.1044922L10.6075439,44.7652283z M15.9511719,63.0483093 c-1.7133789,0-3.1069336-1.3936157-3.1069336-3.1069336c0-1.7132568,1.3935547-3.1068726,3.1069336-3.1068726 c1.7127686,0,3.1064453,1.3936157,3.1064453,3.1068726C19.0576172,61.6546936,17.6639404,63.0483093,15.9511719,63.0483093z M19.4143066,56.1036072l7.2102051-12.2221069c0.5285645,0.1827393,1.0957031,0.2823486,1.6856689,0.2823486 c1.5164795,0,2.8825684-0.6560669,3.8294678-1.6992798l5.8334961,3.4614868 c-0.1855469,0.5322266-0.2868652,1.1035767-0.2868652,1.6981812c0,0.4024658,0.0463867,0.7943726,0.1337891,1.1706543 l-17.6929932,8.0992432C19.9168701,56.606842,19.6779785,56.3418274,19.4143066,56.1036072z M32.449707,71.327301 c-1.7133789,0-3.1069336-1.3936157-3.1069336-3.1068726c0-1.7133179,1.3935547-3.1069336,3.1069336-3.1069336 c1.7132568,0,3.1069336,1.3936157,3.1069336,3.1069336C35.5566406,69.9336853,34.1629639,71.327301,32.449707,71.327301z M45.965332,64.0809021c0,0.0292969,0.0007324,0.0584717,0.0012207,0.0876465l-8.7927246,1.9474487 c-0.8077393-1.8059692-2.6213379-3.067688-4.7241211-3.067688c-1.6472168,0-3.1169434,0.7741089-4.0646973,1.9775391 l-7.4414063-3.7342529c0.1165771-0.430603,0.1791992-0.8832397,0.1791992-1.3502197 c0-0.4025879-0.0463867-0.7944946-0.1337891-1.1708374l17.6931152-8.0993042 c0.9416504,1.2872314,2.4628906,2.1251221,4.1762695,2.1251221c0.46875,0,0.9230957-0.0630493,1.3552246-0.180481 l3.7247314,7.4038696C46.7375488,60.9677429,45.965332,62.4358826,45.965332,64.0809021z M51.1374512,67.1878357 c-1.7132568,0-3.1069336-1.3936768-3.1069336-3.1069336s1.3936768-3.1068726,3.1069336-3.1068726 c1.7133789,0,3.1069336,1.3936157,3.1069336,3.1068726S52.8508301,67.1878357,51.1374512,67.1878357z M64.8139648,45.9498596 c0.6188965,0.2624512,1.2993164,0.4077759,2.0128174,0.4077759c0.2030029,0,0.4031982-0.012146,0.6002197-0.0350342 l5.1159668,15.5751953c-1.1304932,0.647583-1.9941406,1.7096558-2.3830566,2.977417L56.28125,63.5386658 c-0.1235352-1.1801147-0.645752-2.2433472-1.4289551-3.0524902L64.8139648,45.9498596z M69.9335938,86.4488831 c0,1.7132568-1.3935547,3.1068726-3.1068115,3.1068726s-3.1068115-1.3936157-3.1068115-3.1068726 s1.3935547-3.1068726,3.1068115-3.1068726S69.9335938,84.7356262,69.9335938,86.4488831z M67.8059082,81.3701477 c-0.3171387-0.0610352-0.6445313-0.0933838-0.979126-0.0933838c-0.7335205,0-1.4318848,0.1538696-2.0646973,0.430542 l-9.8704834-14.0725708c0.5421143-0.5723267,0.9550781-1.2678833,1.1918945-2.039917l13.87854,1.3364868 c0.1629639,1.5579834,1.0203857,2.9124756,2.2564697,3.7471924L67.8059082,81.3701477z M75.1052246,69.4960632 c-1.7126465,0-3.1063232-1.3936157-3.1063232-3.1069336c0-1.7132568,1.3936768-3.1068726,3.1063232-3.1068726 c1.7133789,0,3.1069336,1.3936157,3.1069336,3.1068726C78.2121582,68.1024475,76.8186035,69.4960632,75.1052246,69.4960632z M87.1557617,51.7637024c0,0.9031982,0.2329102,1.7528076,0.6416016,2.4924927l-9.4991455,8.0667725 c-0.2492676-0.196167-0.5170898-0.3696899-0.8001709-0.5180054l8.1223145-28.2484741 c0.1347656,0.0105591,0.270752,0.0160522,0.407959,0.0160522c0.1082764,0,0.2155762-0.0037231,0.3222656-0.0103149 l3.661377,13.5778809C88.3198242,47.9912415,87.1557617,49.7440491,87.1557617,51.7637024z M92.3278809,54.8700867 c-1.7132568,0-3.1069336-1.3936157-3.1069336-3.1063843c0-1.7132568,1.3936768-3.1068726,3.1069336-3.1068726 s3.1069336,1.3936157,3.1069336,3.1068726C95.4348145,53.4764709,94.0411377,54.8700867,92.3278809,54.8700867z"/></svg>
diff --git a/assets/board/boards/art.svg b/assets/board/boards/art.svg
new file mode 100644
index 0000000..e9fe493
--- /dev/null
+++ b/assets/board/boards/art.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M351.908,464.787c-1.065-1.558-2.3-2.969-3.608-4.056c-6.091-5.077-17.259-21.836-19.801-27.926
+ c-2.534-6.091-5.834-27.662-8.375-45.428c-2.535-17.773-11.675-41.629-19.286-52.282c-2.028-8.126-15.488-82.494-15.488-86.557
+ c0-4.063-0.507-108.636-0.507-108.636s18.28,26.398,25.891,35.032c7.619,8.633,21.322,11.675,27.413,5.584
+ c6.09-6.091,7.619-18.272,0.506-26.906c-7.104-8.626-26.398-46.199-38.58-57.359c-12.181-11.168-30.968-11.168-38.58-11.168
+ s-18.78-3.556-18.78-3.556V71.375c5.584,2.542,9.133,0.507,9.133-1.52V55.638c5.077,0,4.57-2.028,4.57-2.028l-2.028-11.674
+ l0.507-5.077c3.042-1.529,9.133-1.529,6.091-15.232C261.75,7.162,239.664-3.499,221.392,1.07
+ c-17.516-0.757-31.982,15.231-28.176,24.371c-8.376,7.611-4.563,22.078,1.52,32.738c-2.277,9.14,11.425,15.987,11.425,15.987V92.44
+ c0,0-29.698,16.758-38.073,22.842c-8.375,6.098-13.702,12.953-15.231,29.698c-1.52,16.751-7.612,71.583-8.368,76.91
+ c-0.764,5.334,4.563,49.49,4.563,55.589c0,6.084,0.764,13.702,7.619,21.322c6.847,7.612,22.842,21.321,22.842,21.321l12.946-1.528
+ c0,0,1.014,14.974,1.014,18.787c0,3.799,0,47.206,0.764,52.532c0.757,5.334,20.051,51.526,19.287,56.86
+ c-0.61,4.225-9.346,12.77-13.32,18.016H180.27V512h187.315v-47.213H351.908z M184.083,259.199
+ c-1.52,9.139,0.757,24.363,0.757,24.363l-15.23-15.988l1.528-51.776l12.182-38.837l11.417,29.698
+ C194.736,206.659,185.604,250.058,184.083,259.199z M242.699,464.787c0.882-7.648,1.286-16.664,1.286-18.016
+ c0-2.292-4.827-57.616-6.348-62.186c-1.521-4.57,0.25-99.752,0.25-99.752c2.035,5.077,29.44,69.548,34.01,79.695
+ c4.57,10.154,29.697,68.277,29.697,68.277s5.077,20.307,5.584,23.356c0.279,1.646,3.078,4.636,6.876,8.626H242.699z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/bookmark.svg b/assets/board/boards/bookmark.svg
new file mode 100644
index 0000000..9c32d25
--- /dev/null
+++ b/assets/board/boards/bookmark.svg
@@ -0,0 +1,6 @@
+ <svg version="1.1" id="_x32_" x="0px" y="0px" viewBox="0 0 404 512" xmlns="http://www.w3.org/2000/svg">
+ <g style="" transform="matrix(0.765152, 0, 0, 1, 6.346061, 0)">
+ <path class="st0" d="M463.511,0H27.022v512L256,361.971l228.978,150.023V0H463.511z M256,310.645L69.955,432.534V42.933h372.089 v389.601L256,310.645z" style="fill: rgb(75, 75, 75);"/>
+ </g>
+ <polygon :class="{ 'active': bookmarked }" class="st0" points="60.169 42.771 345.58 43.017 344.557 432.704 202.486 310.909 59.259 432.812"/>
+ </svg>
diff --git a/assets/board/boards/books.svg b/assets/board/boards/books.svg
new file mode 100644
index 0000000..6530dba
--- /dev/null
+++ b/assets/board/boards/books.svg
@@ -0,0 +1,21 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M511.414,217.728c-1.902-9.034-8.242-16.503-16.852-19.856l-30.197-11.736v31.046l5.718,2.223
+ c2.58,1.008,4.483,3.25,5.048,5.953c0.565,2.712-0.263,5.538-2.223,7.497L279.14,426.609c-3.834,3.824-9.561,5.03-14.62,3.071
+ l-43.064-16.748v31.046l30.226,11.755c17.18,6.678,36.678,2.581,49.715-10.454l202.594-202.59
+ C510.519,236.161,513.317,226.77,511.414,217.728z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M30.914,299.684c1.356-18.895,7.423-43.649,28.466-42.481l192.2,74.751
+ c17.228,6.698,36.782,2.553,49.818-10.558l185.771-186.991c6.5-6.538,9.269-15.919,7.357-24.933
+ c-1.912-9.023-8.242-16.474-16.832-19.809L286.666,15.374c-17.228-6.698-36.791-2.553-49.818,10.559L21.646,242.538
+ C4.625,256.545,0,282.664,0,305.863c0,23.2,1.545,51.043,27.844,61.866l-6.198-1.451l57.942,22.532v-20.742
+ c0-3.372,0.42-6.668,1.107-9.88l-38.94-15.147C29.37,338.35,29.36,321.499,30.914,299.684z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M111.048,352.658c-4.088,4.107-6.381,9.645-6.381,15.41v96.076l40.823-8.741l50.888,44.383v-96.048
+ c0-5.793,2.298-11.331,6.386-15.419l16.272-16.276l-91.706-35.662L111.048,352.658z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg>
diff --git a/assets/board/boards/btc.svg b/assets/board/boards/btc.svg
new file mode 100644
index 0000000..16eb504
--- /dev/null
+++ b/assets/board/boards/btc.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Creator: CorelDRAW 2019 (64-Bit) -->
+<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100%" height="100%" version="1.1" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 4091.27 4091.73" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xodm="http://www.corel.com/coreldraw/odm/2003">
+ <g id="Layer_x0020_1">
+ <metadata id="CorelCorpID_0Corel-Layer"/>
+ <g id="_1421344023328">
+ <path fill="#F7931A" fill-rule="nonzero" d="M4030.06 2540.77c-273.24,1096.01 -1383.32,1763.02 -2479.46,1489.71 -1095.68,-273.24 -1762.69,-1383.39 -1489.33,-2479.31 273.12,-1096.13 1383.2,-1763.19 2479,-1489.95 1096.06,273.24 1763.03,1383.51 1489.76,2479.57l0.02 -0.02z"/>
+ <path fill="white" fill-rule="nonzero" d="M2947.77 1754.38c40.72,-272.26 -166.56,-418.61 -450,-516.24l91.95 -368.8 -224.5 -55.94 -89.51 359.09c-59.02,-14.72 -119.63,-28.59 -179.87,-42.34l90.16 -361.46 -224.36 -55.94 -92 368.68c-48.84,-11.12 -96.81,-22.11 -143.35,-33.69l0.26 -1.16 -309.59 -77.31 -59.72 239.78c0,0 166.56,38.18 163.05,40.53 90.91,22.69 107.35,82.87 104.62,130.57l-104.74 420.15c6.26,1.59 14.38,3.89 23.34,7.49 -7.49,-1.86 -15.46,-3.89 -23.73,-5.87l-146.81 588.57c-11.11,27.62 -39.31,69.07 -102.87,53.33 2.25,3.26 -163.17,-40.72 -163.17,-40.72l-111.46 256.98 292.15 72.83c54.35,13.63 107.61,27.89 160.06,41.3l-92.9 373.03 224.24 55.94 92 -369.07c61.26,16.63 120.71,31.97 178.91,46.43l-91.69 367.33 224.51 55.94 92.89 -372.33c382.82,72.45 670.67,43.24 791.83,-303.02 97.63,-278.78 -4.86,-439.58 -206.26,-544.44 146.69,-33.83 257.18,-130.31 286.64,-329.61l-0.07 -0.05zm-512.93 719.26c-69.38,278.78 -538.76,128.08 -690.94,90.29l123.28 -494.2c152.17,37.99 640.17,113.17 567.67,403.91zm69.43 -723.3c-63.29,253.58 -453.96,124.75 -580.69,93.16l111.77 -448.21c126.73,31.59 534.85,90.55 468.94,355.05l-0.02 0z"/>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/assets/board/boards/business.svg b/assets/board/boards/business.svg
new file mode 100644
index 0000000..1a14f48
--- /dev/null
+++ b/assets/board/boards/business.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <rect x="247.337" y="175.514" class="st0" width="40.058" height="64.094"/>
+ <rect x="319.442" y="135.456" class="st0" width="40.058" height="104.152"/>
+ <rect x="391.548" y="95.397" class="st0" width="40.058" height="144.211"/>
+ <path class="st0" d="M83.288,113.808c23.12,0,41.85-18.746,41.85-41.85c0-23.128-18.731-41.858-41.85-41.858
+ c-23.128,0-41.859,18.73-41.859,41.858C41.43,95.062,60.16,113.808,83.288,113.808z"/>
+ <path class="st0" d="M509.85,48.07V24.035h-16.024H357.627V0H325.58v24.035H189.381h-16.024V48.07h16.024v149.32h16.023V48.07
+ h272.399v240.352H205.404v-13.316v-5.743h-16.023v2.316v5.719v11.024h-16.024v24.035h16.024h144.462v63.171l-54.924,104.865
+ c-7.988,0.805-14.239,7.472-14.239,15.671c0,8.747,7.088,15.836,15.835,15.836s15.836-7.089,15.836-15.836
+ c0-3.356-1.056-6.455-2.84-9.013l40.332-76.995v78.56h16.024v-76.644l39.55,75.501c-1.604,2.48-2.558,5.422-2.558,8.591
+ c0,8.747,7.088,15.836,15.835,15.836c8.748,0,15.836-7.089,15.836-15.836c0-8.38-6.524-15.17-14.764-15.726l-53.899-102.893
+ v-65.087h143.96h16.024v-24.035h-16.024V48.07H509.85z"/>
+ <path class="st0" d="M225.477,233.381c0-10.156-8.215-18.363-18.355-18.363h-34.05l-8.258-47.046
+ c-4.538-23.722-14.059-42.351-34.339-42.351H44.5c-20.279,0-42.35,22.064-42.35,42.351v148.686c0,10.14,8.223,18.363,18.363,18.363
+ c4.988,0,0,0,12.808,0l6.987,152.02c0,10.789,8.751,19.536,19.541,19.536c8.093,0,28.287,0,39.08,0
+ c10.789,0,19.54-8.747,19.54-19.536l9.166-277.696h0.461l5.254,23.183c1.729,11.055,11.251,19.207,22.439,19.207h51.333
+ C217.262,251.736,225.477,243.52,225.477,233.381z M69.921,207.304v-66.872h24.035v66.872l-12.768,15.061L69.921,207.304z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/chud.jpg b/assets/board/boards/chud.jpg
new file mode 100644
index 0000000..6c1a03e
--- /dev/null
+++ b/assets/board/boards/chud.jpg
Binary files differ
diff --git a/assets/board/boards/computing.svg b/assets/board/boards/computing.svg
new file mode 100644
index 0000000..6d73dae
--- /dev/null
+++ b/assets/board/boards/computing.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+<![CDATA[
+ .st0{fill:#4B4B4B;}
+]]>
+</style>
+<g>
+ <path class="st0" d="M0,354.344h345.656V75.188H0V354.344z M40.453,115.656h264.734v198.234H40.453V115.656z"/>
+ <path class="st0" d="M208.75,373.219h-71.875c0,0,0,37.781-44.531,37.781c0,15.047,0,25.813,0,25.813h160.969
+ c0,0,0-10.766,0-25.813C208.75,411,208.75,373.219,208.75,373.219z"/>
+ <path class="st0" d="M367.344,75.188v361.625H512V75.188H367.344z M439.688,346.406c-13,0-23.516-10.516-23.516-23.5
+ s10.516-23.5,23.516-23.5c12.969,0,23.5,10.516,23.5,23.5S452.656,346.406,439.688,346.406z M476.75,199.953h-72.344v-14.469
+ h72.344V199.953z M476.75,156.563h-72.344v-14.469h72.344V156.563z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/crypto.svg b/assets/board/boards/crypto.svg
new file mode 100644
index 0000000..16eb504
--- /dev/null
+++ b/assets/board/boards/crypto.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Creator: CorelDRAW 2019 (64-Bit) -->
+<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100%" height="100%" version="1.1" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 4091.27 4091.73" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xodm="http://www.corel.com/coreldraw/odm/2003">
+ <g id="Layer_x0020_1">
+ <metadata id="CorelCorpID_0Corel-Layer"/>
+ <g id="_1421344023328">
+ <path fill="#F7931A" fill-rule="nonzero" d="M4030.06 2540.77c-273.24,1096.01 -1383.32,1763.02 -2479.46,1489.71 -1095.68,-273.24 -1762.69,-1383.39 -1489.33,-2479.31 273.12,-1096.13 1383.2,-1763.19 2479,-1489.95 1096.06,273.24 1763.03,1383.51 1489.76,2479.57l0.02 -0.02z"/>
+ <path fill="white" fill-rule="nonzero" d="M2947.77 1754.38c40.72,-272.26 -166.56,-418.61 -450,-516.24l91.95 -368.8 -224.5 -55.94 -89.51 359.09c-59.02,-14.72 -119.63,-28.59 -179.87,-42.34l90.16 -361.46 -224.36 -55.94 -92 368.68c-48.84,-11.12 -96.81,-22.11 -143.35,-33.69l0.26 -1.16 -309.59 -77.31 -59.72 239.78c0,0 166.56,38.18 163.05,40.53 90.91,22.69 107.35,82.87 104.62,130.57l-104.74 420.15c6.26,1.59 14.38,3.89 23.34,7.49 -7.49,-1.86 -15.46,-3.89 -23.73,-5.87l-146.81 588.57c-11.11,27.62 -39.31,69.07 -102.87,53.33 2.25,3.26 -163.17,-40.72 -163.17,-40.72l-111.46 256.98 292.15 72.83c54.35,13.63 107.61,27.89 160.06,41.3l-92.9 373.03 224.24 55.94 92 -369.07c61.26,16.63 120.71,31.97 178.91,46.43l-91.69 367.33 224.51 55.94 92.89 -372.33c382.82,72.45 670.67,43.24 791.83,-303.02 97.63,-278.78 -4.86,-439.58 -206.26,-544.44 146.69,-33.83 257.18,-130.31 286.64,-329.61l-0.07 -0.05zm-512.93 719.26c-69.38,278.78 -538.76,128.08 -690.94,90.29l123.28 -494.2c152.17,37.99 640.17,113.17 567.67,403.91zm69.43 -723.3c-63.29,253.58 -453.96,124.75 -580.69,93.16l111.77 -448.21c126.73,31.59 534.85,90.55 468.94,355.05l-0.02 0z"/>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/assets/board/boards/family.svg b/assets/board/boards/family.svg
new file mode 100644
index 0000000..4aa9b55
--- /dev/null
+++ b/assets/board/boards/family.svg
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M78.641,118.933c22.88,0,41.416-18.551,41.416-41.414c0-22.887-18.536-41.423-41.416-41.423
+ c-22.887,0-41.422,18.536-41.422,41.423C37.218,100.382,55.754,118.933,78.641,118.933z"/>
+ <path class="st0" d="M255.706,228.73v0.062c0.101,0,0.194-0.031,0.294-0.031c0.101,0,0.194,0.031,0.294,0.031v-0.062
+ c15.562-0.317,28.082-12.976,28.082-28.601c0-15.648-12.52-28.299-28.082-28.616v-0.063c-0.101,0-0.194,0.031-0.294,0.031
+ c-0.1,0-0.193-0.031-0.294-0.031v0.063c-15.563,0.317-28.082,12.968-28.082,28.616C227.623,215.754,240.143,228.413,255.706,228.73
+ z"/>
+ <path class="st0" d="M433.359,118.933c22.887,0,41.423-18.551,41.423-41.414c0-22.887-18.536-41.423-41.423-41.423
+ c-22.88,0-41.416,18.536-41.416,41.423C391.944,100.382,410.48,118.933,433.359,118.933z"/>
+ <path class="st0" d="M470.097,138.553h-36.312h-18.404c-21.106,0-40.432,11.831-50.033,30.622l-33.494,97.967
+ c-1.154,2.246-3.298,3.84-5.792,4.282c-2.493,0.442-5.048-0.309-6.914-2.036l-20.836-18.04c-6.233-5.769-14.408-8.973-22.902-8.973
+ H256h-19.41c-8.494,0-16.669,3.204-22.902,8.973l-20.835,18.04c-1.866,1.727-4.421,2.478-6.914,2.036
+ c-2.492-0.442-4.637-2.036-5.791-4.282l-33.495-97.967c-9.6-18.791-28.926-30.622-50.032-30.622H78.215H41.902
+ C21.834,138.553,0,160.387,0,180.464v139.211c0,10.034,8.13,18.171,18.164,18.171c4.939,0,0,0,12.682,0l6.906,118.725
+ c0,10.676,8.664,19.332,19.34,19.332c4.506,0,12.814,0,21.122,0c8.308,0,16.616,0,21.122,0c10.676,0,19.34-8.656,19.34-19.332
+ l6.906-118.725l-0.085-84.766c0-1.339,0.914-2.493,2.222-2.818c1.309-0.31,2.648,0.309,3.26,1.502l26.572,65.401
+ c3.206,6.256,9.152,10.654,16.074,11.885c6.922,1.231,14.022-0.844,19.186-5.613l25.426-18.729
+ c0.852-0.782,2.083-0.984,3.136-0.542c1.061,0.473,1.743,1.518,1.743,2.663l0.093,73.508l4.777,82.187
+ c0,7.387,6.001,13.379,13.395,13.379c3.113,0,8.865,0,14.618,0c5.753,0,11.506,0,14.618,0c7.394,0,13.394-5.992,13.394-13.379
+ l4.778-82.187l0.093-73.508c0-1.146,0.681-2.19,1.742-2.663c1.053-0.442,2.284-0.24,3.136,0.542l25.427,18.729
+ c5.164,4.769,12.264,6.844,19.186,5.613c6.922-1.231,12.868-5.629,16.073-11.885l26.573-65.401
+ c0.611-1.192,1.951-1.812,3.259-1.502c1.309,0.325,2.222,1.478,2.222,2.818l-0.085,84.766l6.906,118.725
+ c0,10.676,8.664,19.332,19.341,19.332c4.507,0,12.814,0,21.122,0c8.308,0,16.616,0,21.121,0c10.677,0,19.342-8.656,19.342-19.332
+ l6.906-118.725c12.682,0,7.742,0,12.682,0c10.034,0,18.164-8.137,18.164-18.171V180.464
+ C512,160.387,490.166,138.553,470.097,138.553z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/film.svg b/assets/board/boards/film.svg
new file mode 100644
index 0000000..5ccb192
--- /dev/null
+++ b/assets/board/boards/film.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M443.724,166.599c27.038-2.293,47.087-26.07,44.786-53.125c-2.292-27.038-26.078-47.087-53.115-44.795
+ c-27.038,2.301-47.078,26.088-44.776,53.124C392.91,148.85,416.677,168.9,443.724,166.599z"/>
+ <path class="st0" d="M431.752,346.544l30.541-114.485c5.068-19.305-6.466-39.075-25.78-44.144
+ c-19.304-5.077-39.075,6.448-44.152,25.771v-0.018L365.052,315.64l-78.755-13.276c-17.218-4.304-34.696,5.786-39.578,22.864
+ l-33.317,133.445c-3.82,13.342,3.913,27.28,17.274,31.1c13.37,3.81,27.298-3.923,31.128-17.283l39.392-98.638l61.286,16.155
+ C398.863,400.125,421.633,382.927,431.752,346.544z"/>
+ <path class="st0" d="M388.177,462.949l-0.121-0.01c-0.018,0-0.028,0-0.047,0L388.177,462.949z"/>
+ <path class="st0" d="M498.349,286.311c-10.1-2.999-20.721,2.749-23.722,12.858l-27.876,93.848
+ c-2.096,6.606-4.536,11.777-7.146,15.746c-3.987,5.944-8.002,9.373-13.854,12.093c-5.842,2.664-14.031,4.379-25.416,4.37
+ c-3.009,0.008-6.215-0.113-9.634-0.355l-54.009-3.363c-10.519-0.661-19.575,7.341-20.227,17.861
+ c-0.662,10.518,7.342,19.574,17.86,20.226l53.73,3.345c4.211,0.298,8.31,0.448,12.28,0.456c10.072-0.009,19.5-0.988,28.369-3.289
+ c13.268-3.392,25.315-10.127,34.501-19.892c9.251-9.736,15.531-21.885,19.91-35.609l0.074-0.214l28.015-94.362
+ C514.206,299.923,508.447,289.302,498.349,286.311z"/>
+ <path class="st0" d="M248.974,81.219L0,21.256v15.14v281.228l248.974-59.962V81.219z M225.123,238.87L23.851,287.355V51.536
+ l201.272,48.466V238.87z"/>
+ <polygon class="st0" points="204.989,115.189 47.991,84.937 47.991,253.953 204.989,223.692 "/>
+</g>
+</svg>
diff --git a/assets/board/boards/food.svg b/assets/board/boards/food.svg
new file mode 100644
index 0000000..374a3d5
--- /dev/null
+++ b/assets/board/boards/food.svg
@@ -0,0 +1,41 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M201.819,390.942c-4.235,0-38.314,38.31-38.314,69.445c0,21.154,17.157,38.31,38.314,38.31
+ c21.16,0,38.317-17.156,38.317-38.31C240.136,425.657,206.053,390.942,201.819,390.942z M201.819,485.75
+ c-8.459,0-15.32-6.865-15.32-15.327c0-12.445,13.629-27.758,15.32-27.758c1.692,0,15.316,13.879,15.316,27.758
+ C217.135,478.885,210.277,485.75,201.819,485.75z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M310.181,390.942c-4.234,0-38.318,38.31-38.318,69.445c0,21.154,17.156,38.31,38.318,38.31
+ c21.158,0,38.314-17.156,38.314-38.31C348.496,425.657,314.415,390.942,310.181,390.942z M310.181,485.75
+ c-8.461,0-15.32-6.865-15.32-15.327c0-12.445,13.625-27.758,15.32-27.758c1.692,0,15.317,13.879,15.317,27.758
+ C325.498,478.885,318.639,485.75,310.181,485.75z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M439.786,393.661c-4.018-1.328-48.404,24.354-58.175,53.913c-6.643,20.087,4.262,41.764,24.35,48.404
+ c20.091,6.639,41.764-4.26,48.407-24.354C465.267,438.653,443.806,394.989,439.786,393.661z M429.379,473.941
+ c-2.656,8.038-11.319,12.389-19.353,9.733c-8.031-2.656-12.389-11.316-9.736-19.353c3.909-11.817,21.652-22.079,23.262-21.55
+ C425.159,443.301,433.737,460.761,429.379,473.941z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M72.21,393.661c-4.018,1.328-25.476,44.992-14.578,77.963c6.643,20.094,28.317,30.993,48.408,24.354
+ c20.087-6.64,30.993-28.317,24.35-48.404C120.617,418.015,76.232,392.333,72.21,393.661z M101.97,483.674
+ c-8.035,2.656-16.694-1.695-19.35-9.733c-4.358-13.18,4.22-30.64,5.828-31.17c1.606-0.53,19.352,9.733,23.259,21.55
+ C114.363,472.358,110.004,481.018,101.97,483.674z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M485.764,169.449c-3.766,0-24.648,0-37.279,0v-12.262v-0.212v-23.746c0.003-7.261-1.48-14.254-4.16-20.589
+ c-4.026-9.514-10.715-17.56-19.148-23.259c-8.43-5.707-18.675-9.048-29.584-9.041H279.238V62.131h7.098
+ c13.488,0,24.418-10.934,24.418-24.425c0-13.477-10.93-24.403-24.418-24.403h-60.673c-13.486,0-24.416,10.926-24.416,24.403
+ c0,13.491,10.93,24.425,24.416,24.425h7.099V80.34H116.408c-7.268,0-14.257,1.476-20.593,4.153
+ c-9.51,4.026-17.559,10.722-23.262,19.155c-5.7,8.427-9.044,18.675-9.037,29.581v23.746v0.212v12.262c-12.633,0-33.515,0-37.279,0
+ C11.746,169.449,0,181.195,0,195.681c0,14.493,11.746,26.233,26.236,26.233c12.862,0,30.431,7.784,37.279,23.294v50.148
+ c-0.004,12.855,2.61,25.159,7.335,36.326c7.094,16.761,18.908,30.986,33.793,41.044c14.878,10.058,32.897,15.949,52.179,15.942
+ h198.351c12.851,0.007,25.155-2.606,36.326-7.338c16.76-7.092,30.986-18.901,41.044-33.79c10.058-14.875,15.948-32.9,15.942-52.182
+ v-50.148c6.847-15.51,24.416-23.294,37.279-23.294c14.49,0,26.236-11.74,26.236-26.233
+ C512,181.195,500.254,169.449,485.764,169.449z M414.494,295.356c-0.007,8.257-1.66,15.991-4.655,23.09
+ c-4.482,10.609-12.036,19.706-21.514,26.105c-9.504,6.407-20.78,10.115-33.151,10.115H156.823c-8.257,0-15.991-1.652-23.078-4.648
+ h-0.004c-10.616-4.485-19.721-12.036-26.116-21.514c-6.402-9.493-10.107-20.78-10.118-33.154V181.922h316.987V295.356z
+ M414.494,156.975H97.506v-23.746c0.004-2.684,0.523-5.079,1.48-7.36c1.409-3.348,3.842-6.286,6.865-8.328
+ c3.069-2.048,6.54-3.2,10.566-3.221h279.175c2.673,0.014,5.074,0.53,7.353,1.484c3.354,1.412,6.3,3.856,8.334,6.88l-0.007-0.014
+ c2.055,3.072,3.207,6.548,3.221,10.566V156.975z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg>
diff --git a/assets/board/boards/gmi.svg b/assets/board/boards/gmi.svg
new file mode 100644
index 0000000..ca41511
--- /dev/null
+++ b/assets/board/boards/gmi.svg
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M471.78,276.233l0.114,0.107l-237.5-234.786l0.008,0.016c-26.765-26.78-62.007-40.235-97.092-40.213
+ C102.222,1.335,66.988,14.789,40.216,41.57C13.431,68.341-0.024,103.584,0,138.673c-0.024,35.081,13.431,70.323,40.216,97.095
+ l237.439,234.732l-0.065-0.069c26.772,26.78,62.006,40.235,97.103,40.212c35.081,0.023,70.316-13.432,97.088-40.204
+ c26.788-26.78,40.242-62.022,40.22-97.111C512.023,338.239,498.568,302.997,471.78,276.233z M164.543,311.881
+ c-0.069,0.214-0.119,0.413-0.191,0.628L63.327,212.633l0.008,0.016c-20.454-20.47-30.62-47.15-30.636-73.976
+ c0.015-26.834,10.181-53.507,30.636-73.976c20.47-20.454,47.146-30.624,73.976-30.639c26.826,0.015,53.503,10.185,73.972,30.639
+ l0.108,0.108l104.753,103.55c-20.662,4.335-39.32,11.962-55.704,21.78c-35.46,21.274-60.67,52.043-77.273,80.876
+ C174.862,285.453,168.708,299.459,164.543,311.881z M448.66,447.311c-20.469,20.447-47.142,30.617-73.968,30.632
+ c-26.838-0.015-53.514-10.177-73.984-30.639l-0.061-0.061L191.238,339.081c0.326-2.105,0.808-4.58,1.508-7.321
+ c2.531-10.132,7.628-23.786,15.316-38.221c11.525-21.695,28.886-45.204,51.829-63.339c22.84-18.02,50.857-30.892,85.582-32.845
+ l103.142,101.958l0.045,0.038c20.462,20.47,30.624,47.15,30.64,73.976C479.285,400.153,469.123,426.834,448.66,447.311z"/>
+ <path class="st0" d="M81.477,170.66l35.747-85.456c-13.417,0-26.026,5.216-35.503,14.696
+ C62.148,119.473,62.148,151.331,81.477,170.66z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/hbd.svg b/assets/board/boards/hbd.svg
new file mode 100644
index 0000000..f7dfd1b
--- /dev/null
+++ b/assets/board/boards/hbd.svg
@@ -0,0 +1,30 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+
+ .st0{fill:#4B4B4B;}
+
+</style>
+<g>
+ <path class="st0" d="M473.078,460.594L473,460.188c-1.625-8.25-5.219-16.125-9.828-23.563c-3.469-5.594-7.547-10.938-11.953-15.969
+ c-6.625-7.563-13.984-14.406-21.25-20.125c-3.641-2.844-7.25-5.438-10.766-7.688c-3.391-2.141-6.688-4-9.859-5.469l-64.594-32.906
+ l-0.188-0.094c-1.734-0.781-3.594-2.063-5.422-3.75l-6.359-5.813l-6.594,5.781C320.047,342.563,316,333.453,316,329.563
+ c0-6.422-1.453-12.156,0.375-17.438c0,0,27.406-36.594,41.813-80.688c47.844-39.172,22.859-72.609,13.563-67.969l-4.953,18.516
+ c-0.031-13.266-1.438-25.953-4.047-37.859h12.281l-1.844-11.203L353.828,16.469l-5.016-2c-0.406-0.156-9.469-3.781-25.547-7.344
+ C307.203,3.531,284.141,0,255.719,0s-51.688,3.531-67.953,7.094c-16.25,3.594-25.5,7.188-25.891,7.344l-5.125,2l-20.281,127.688
+ h12.781c-2.609,11.906-4,24.594-4.063,37.844l-4.922-18.5c-9.313-4.641-34.297,28.797,13.547,67.969
+ c14.406,44.094,41.813,80.688,41.813,80.688c1.813,5.281,0.391,6.125,0.391,17.438c0,5.547-2.797,12.188-7.063,18.25l-6.609-5.781
+ l-6.359,6.313c-2.531,2.531-5.438,4.625-8.547,6.031l-0.234,0.109l-62.781,32.859c-5.531,2.594-11.672,6.156-18.031,10.625
+ c-9.703,6.813-19.906,15.656-28.563,26.063c-4.313,5.219-8.25,10.844-11.5,16.828c-3.234,5.984-5.797,12.375-7.266,19.109
+ l-0.109,0.5L33.359,512H256h222.641L473.078,460.594z M159.016,124.875l14.969-94.25c4.078-1.281,10.5-3.125,18.984-4.938
+ c15.063-3.25,36.547-6.438,62.75-6.438c26.813,0,48.484,3.344,63.375,6.656c7.438,1.656,13.172,3.297,17.016,4.5
+ c0.203,0.078,0.375,0.125,0.563,0.188l15.656,94.281H159.016z M256,492.75H54.813l3.141-29.063
+ c1.391-6.094,4.188-12.281,8.047-18.328c5.906-9.25,14.266-17.984,22.859-25.094c4.297-3.547,8.656-6.703,12.75-9.344
+ s7.953-4.766,11.156-6.234l0.219-0.094l62.891-32.906c2.375-1.125,4.609-2.438,6.703-3.891l76.578,67l73.969-64.734
+ c0.984,0.594,2,1.125,3.063,1.641l64.594,32.891l0.172,0.094c4.063,1.859,9.438,5.141,15.016,9.344
+ c8.375,6.313,17.359,14.781,24.453,23.719c3.563,4.469,6.641,9.063,8.984,13.531c2.297,4.328,3.859,8.516,4.625,12.266
+ l3.172,29.203H256z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg>
diff --git a/assets/board/boards/health.svg b/assets/board/boards/health.svg
new file mode 100644
index 0000000..2ad7bf9
--- /dev/null
+++ b/assets/board/boards/health.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M410.318,213.58c-16.748-15.865,33.085-70.542,22.448-128.733C421.538,23.408,326.147,0,256,0
+ C185.852,0,90.462,23.408,79.233,84.848c-10.637,58.191,39.196,112.868,22.448,128.733
+ c-30.866,29.254-58.216,87.179-44.185,160.318C70.697,442.752,124.122,512,256,512c131.878,0,185.304-69.248,198.503-138.102
+ C468.534,300.76,441.184,242.834,410.318,213.58z M341.662,169.695c-16.063,0-50.862-7.011-85.661-7.011
+ c-34.8,0-69.608,7.011-85.68,7.011c-16.062,0-42.376-55.388-34.799-76.07C146.236,64.371,205.137,49.74,256,49.74
+ c50.862,0,109.764,14.631,120.478,43.885C384.047,114.307,357.724,169.695,341.662,169.695z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/history.svg b/assets/board/boards/history.svg
new file mode 100644
index 0000000..495a9c2
--- /dev/null
+++ b/assets/board/boards/history.svg
@@ -0,0 +1,16 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M326.3,294.606c0-77.945-63.188-141.134-141.132-141.134c-77.954,0-135.338,63.756-144.72,141.134
+ c-5.479,45.22-13.7,113.74-13.7,113.74h39.2l13.708-90.441l84.953-13.7v49.33l-49.078,10.847L98.837,507.007
+ c0,0,76.731,24.661,128.802-35.63c34.408-39.836,79.48,19.172,137.032-21.93C329.041,430.266,326.3,372.558,326.3,294.606z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M463.332,301.465C476.971,127.581,347.881,0,185.168,0c-55.666,0-107.72,15.446-152.12,42.271l57.263,97.666
+ c26.476-16.31,66.086-28.876,99.464-28.876c96.034,0,173.377,77.849,173.883,173.883c0.681,129.03,50.343,180.952,121.594,200.132
+ C466.072,452.196,452.372,441.227,463.332,301.465z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg>
diff --git a/assets/board/boards/humor.svg b/assets/board/boards/humor.svg
new file mode 100644
index 0000000..819a9a2
--- /dev/null
+++ b/assets/board/boards/humor.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve"><g><path d="M32,12.4033203c-8.0654297,0-14.6269531,6.5615234-14.6269531,14.6269531S23.9345703,41.6572266,32,41.6572266 s14.6269531-6.5615234,14.6269531-14.6269531S40.0654297,12.4033203,32,12.4033203z M32,39.6572266 c-6.9624023,0-12.6269531-5.6640625-12.6269531-12.6269531S25.0375977,14.4033203,32,14.4033203 s12.6269531,5.6640625,12.6269531,12.6269531S38.9624023,39.6572266,32,39.6572266z"/><path d="M25.503418,25.9453125v-0.9492188c0-0.7353516,0.5986328-1.3339844,1.3344727-1.3339844 s1.3344727,0.5986328,1.3344727,1.3339844v0.9492188c0,0.5527344,0.4477539,1,1,1s1-0.4472656,1-1v-0.9492188 c0-1.8378906-1.4956055-3.3339844-3.3344727-3.3339844s-3.3344727,1.4960938-3.3344727,3.3339844v0.9492188 c0,0.5527344,0.4477539,1,1,1S25.503418,26.4980469,25.503418,25.9453125z"/><path d="M37.1621094,21.6621094c-1.8388672,0-3.3344727,1.4960938-3.3344727,3.3339844v0.9492188c0,0.5527344,0.4477539,1,1,1 s1-0.4472656,1-1v-0.9492188c0-0.7353516,0.5986328-1.3339844,1.3344727-1.3339844s1.3344727,0.5986328,1.3344727,1.3339844 v0.9492188c0,0.5527344,0.4477539,1,1,1s1-0.4472656,1-1v-0.9492188 C40.496582,23.1582031,39.0009766,21.6621094,37.1621094,21.6621094z"/><path d="M39.7543945,28.3613281c-0.34375-0.2421875-0.800293-0.2421875-1.144043-0.0039063 c-4.4267578,3.0683594-8.7939453,3.0683594-13.2207031,0c-0.3447266-0.2382813-0.8012695-0.2382813-1.144043,0.0039063 c-0.3427734,0.2402344-0.4995117,0.6689453-0.3925781,1.0732422c0.0810547,0.3066406,2.0527344,7.5126953,8.128418,7.625 c0.0063477,0,0.012207,0,0.0185547,0s0.012207,0,0.0185547,0c6.0756836-0.1123047,8.0473633-7.3183594,8.128418-7.625 C40.2539063,29.0302734,40.097168,28.6015625,39.7543945,28.3613281z M32,35.0595703 c-2.5-0.0556641-4.1245117-1.8867188-5.0830078-3.5351563c3.3813477,1.5253906,6.7949219,1.5224609,10.1762695-0.0048828 C36.1386719,33.1689453,34.5141602,35.0039063,32,35.0595703z"/><path d="M52.1601563,8.6699219H11.8398438c-1.7866211,0-3.2402344,1.453125-3.2402344,3.2402344v30.2402344 c0,1.7871094,1.4536133,3.2402344,3.2402344,3.2402344h5.5332031v8.9394531c0,0.3857422,0.222168,0.7373047,0.5708008,0.9033203 c0.1367188,0.0644531,0.2832031,0.0966797,0.4291992,0.0966797c0.2255859,0,0.449707-0.0761719,0.6313477-0.2246094 l11.9287109-9.7148438h21.2270508c1.7866211,0,3.2402344-1.453125,3.2402344-3.2402344V11.9101563 C55.4003906,10.1230469,53.9467773,8.6699219,52.1601563,8.6699219z M53.4003906,42.1503906 c0,0.6835938-0.5561523,1.2402344-1.2402344,1.2402344H30.5776367c-0.2299805,0-0.453125,0.0791016-0.6313477,0.2246094 l-10.5732422,8.6103516V44.390625c0-0.5527344-0.4477539-1-1-1h-6.5332031c-0.684082,0-1.2402344-0.5566406-1.2402344-1.2402344 V11.9101563c0-0.6835938,0.5561523-1.2402344,1.2402344-1.2402344h40.3203125c0.684082,0,1.2402344,0.5566406,1.2402344,1.2402344 V42.1503906z"/></g></svg>
diff --git a/assets/board/boards/irl.svg b/assets/board/boards/irl.svg
new file mode 100644
index 0000000..af94ae9
--- /dev/null
+++ b/assets/board/boards/irl.svg
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M47.294,422.846c-10.908-10.924-17.615-25.87-17.633-42.462v-61.795H0v61.795
+ c0.017,49.545,40.23,89.739,89.765,89.774h40.532v-29.67H89.765C73.164,440.48,58.236,433.771,47.294,422.846z"/>
+ <path class="st0" d="M85.931,235.914c21.636,0,39.144-17.508,39.144-39.154c0-21.609-17.507-39.153-39.144-39.153
+ c-21.619,0-39.154,17.544-39.154,39.153C46.777,218.406,64.312,235.914,85.931,235.914z"/>
+ <path class="st0" d="M179.165,369.308h-54.927v-81.758c0-21.165-17.134-38.318-38.308-38.318
+ c-21.147,0-38.299,17.152-38.299,38.318v93.146c0,21.155,17.143,38.308,38.299,38.308c2.873,0,70.024-0.195,70.024-0.195
+ l3.674,56.688c0.258,11.61,9.884,20.818,21.494,20.568c11.628-0.258,20.826-9.884,20.56-21.494l2.233-80.512
+ C203.915,380.375,192.839,369.308,179.165,369.308z"/>
+ <path class="st0" d="M482.339,318.589v61.795c-0.017,16.592-6.725,31.538-17.632,42.462
+ c-10.943,10.925-25.871,17.634-42.462,17.642h-40.541v29.67h40.541c49.526-0.036,89.73-40.23,89.756-89.774v-61.795H482.339z"/>
+ <path class="st0" d="M426.069,235.914c21.618,0,39.153-17.508,39.153-39.154c0-21.609-17.535-39.153-39.153-39.153
+ c-21.636,0-39.145,17.544-39.145,39.153C386.924,218.406,404.433,235.914,426.069,235.914z"/>
+ <path class="st0" d="M464.378,380.695v-93.146c0-21.165-17.17-38.318-38.308-38.318c-21.173,0-38.308,17.152-38.308,38.318v81.758
+ h-54.927c-13.674,0-24.75,11.067-24.75,24.75l2.233,80.512c-0.267,11.61,8.932,21.236,20.56,21.494
+ c11.61,0.25,21.235-8.959,21.493-20.568l3.675-56.688c0,0,67.151,0.195,70.024,0.195
+ C447.224,419.003,464.378,401.851,464.378,380.695z"/>
+ <rect x="153.651" y="318.963" class="st0" width="212.384" height="36.146"/>
+ <rect x="244.047" y="374.511" class="st0" width="24.714" height="87.497"/>
+ <path class="st0" d="M359.59,159.404c0,7.286-2.353,14.137-6.677,20.294c-4.319,6.165-10.671,11.556-18.464,15.56l-5.686,2.918
+ l7.376,16.486c-22.37-3.87-43.13-11.148-53.615-15.222l-0.208-0.089l-0.222-0.062c-14.061-4.422-25.048-13.086-30.626-23.335
+ l-11.85,6.486c7.575,13.753,21.32,24.198,38.028,29.554v0.018c12.976,5.026,40.252,14.581,68.908,17.802l11.712,1.29
+ l-12.108-27.081c7.109-4.475,13.211-10.026,17.793-16.557c5.743-8.149,9.146-17.792,9.133-28.06
+ c0.013-12.775-5.266-24.554-13.772-33.77c-8.514-9.252-20.249-16.138-33.713-19.822l-3.555,13.015
+ c11.254,3.052,20.782,8.781,27.33,15.934C355.956,141.949,359.59,150.339,359.59,159.404z"/>
+ <path class="st0" d="M161.724,156.362l-16.228,36.28l11.722-1.299c40.461-4.52,79.209-18.078,97.602-25.204
+ c17.478-5.596,32.561-15.142,43.419-27.552c10.952-12.49,17.579-28.015,17.571-44.803c0.008-10.978-2.834-21.458-7.865-30.862
+ c-7.548-14.118-19.968-25.844-35.337-34.046c-15.356-8.211-33.713-12.944-53.428-12.944c-26.258,0.018-50.153,8.389-67.742,22.286
+ c-8.786,6.948-15.987,15.293-21.031,24.705c-5.022,9.404-7.851,19.884-7.851,30.862c-0.014,14.003,4.626,27.162,12.499,38.38
+ C141.813,141.753,150.96,149.956,161.724,156.362z M142.316,69.283c6.081-11.406,16.464-21.396,29.799-28.522
+ c13.318-7.117,29.536-11.352,47.067-11.334c23.372-0.018,44.411,7.508,59.384,19.358c7.477,5.925,13.429,12.891,17.486,20.498
+ c4.066,7.615,6.268,15.844,6.268,24.5c-0.014,13.194-5.115,25.497-14.225,35.924c-9.097,10.409-22.206,18.825-37.748,23.709
+ l-0.196,0.063l-0.208,0.088c-15.929,6.175-48.139,17.437-82.368,22.758l11.605-25.934l-5.698-2.918
+ c-11.498-5.89-20.911-13.87-27.379-23.087c-6.476-9.226-10.053-19.572-10.066-30.604C136.048,85.127,138.238,76.899,142.316,69.283
+ z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/links.svg b/assets/board/boards/links.svg
new file mode 100644
index 0000000..b269373
--- /dev/null
+++ b/assets/board/boards/links.svg
@@ -0,0 +1,31 @@
+
+ <svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+ <g>
+ <path class="st0 link1" d="M278.172,297.375l-51.203,51.188c0.016,0.594,0.031,1.188,0.031,1.781c0,8.406-1.594,16.781-4.766,24.625
+ c-3.203,7.813-7.922,15.156-14.375,21.563l-33.672,33.719c-6.453,6.438-13.766,11.156-21.609,14.344
+ c-7.859,3.188-16.219,4.781-24.609,4.781c-8.375,0-16.75-1.594-24.594-4.75c-7.844-3.219-15.156-7.938-21.625-14.375
+ c-6.438-6.438-11.156-13.75-14.344-21.594s-4.781-16.219-4.781-24.625c0-8.375,1.594-16.75,4.781-24.594
+ s7.906-15.156,14.344-21.625l33.719-33.688c6.438-6.406,13.734-11.156,21.594-14.344c7.828-3.188,16.219-4.781,24.594-4.781
+ c0.594,0,1.188,0.031,1.766,0.063l51.203-51.234c-1.594-0.734-3.203-1.422-4.844-2.078c-15.422-6.25-31.781-9.375-48.125-9.375
+ s-32.719,3.125-48.125,9.375c-15.422,6.25-29.906,15.688-42.359,28.094l-33.688,33.719c-12.438,12.406-21.859,26.906-28.109,42.344
+ S0,367.688,0,384.031s3.125,32.719,9.375,48.156c6.25,15.406,15.672,29.906,28.109,42.313
+ c12.422,12.469,26.922,21.906,42.344,28.125c15.438,6.281,31.797,9.375,48.141,9.375c16.359,0,32.719-3.094,48.141-9.375
+ c15.422-6.219,29.922-15.656,42.344-28.125l33.703-33.656c12.422-12.469,21.844-26.938,28.109-42.344
+ c6.266-15.469,9.359-31.813,9.375-48.156c-0.016-16.313-3.109-32.688-9.375-48.156
+ C279.594,300.594,278.891,298.969,278.172,297.375z"/>
+ <path class="st0 link2" d="M502.625,79.844c-6.25-15.438-15.672-29.938-28.109-42.359c-12.422-12.422-26.922-21.859-42.359-28.109
+ C416.734,3.125,400.375,0,384.031,0s-32.719,3.125-48.141,9.375s-29.922,15.688-42.344,28.109l-33.703,33.703
+ C247.422,83.594,238,98.094,231.734,113.531c-6.266,15.406-9.359,31.781-9.359,48.141c0,16.344,3.094,32.703,9.359,48.141
+ c0.672,1.625,1.359,3.219,2.094,4.828l51.203-51.203c-0.016-0.578-0.031-1.156-0.031-1.766c0-8.391,1.594-16.781,4.781-24.609
+ c3.188-7.844,7.906-15.156,14.359-21.625l33.672-33.688c6.453-6.406,13.766-11.141,21.625-14.344
+ c7.813-3.156,16.203-4.781,24.594-4.781c8.406,0,16.75,1.625,24.625,4.781c7.813,3.203,15.141,7.938,21.594,14.344
+ c6.438,6.469,11.156,13.781,14.344,21.625c3.156,7.844,4.781,16.219,4.781,24.594c0,8.391-1.625,16.75-4.781,24.625
+ c-3.188,7.844-7.906,15.156-14.344,21.594l-33.688,33.688c-6.438,6.438-13.766,11.156-21.625,14.344
+ c-7.828,3.188-16.203,4.781-24.594,4.781c-0.594,0-1.188-0.016-1.766-0.031l-51.203,51.219c1.594,0.719,3.203,1.422,4.813,2.063
+ c15.453,6.281,31.813,9.406,48.156,9.406s32.719-3.125,48.125-9.406c15.422-6.25,29.906-15.672,42.359-28.094l33.688-33.703
+ c12.438-12.422,21.859-26.922,28.109-42.359c6.25-15.406,9.375-31.781,9.375-48.125S508.875,95.25,502.625,79.844z"/>
+ <path class="st0" d="M160.219,351.781c12.234,12.25,32.063,12.25,44.281,0L351.781,204.5c12.219-12.219,12.25-32.031,0-44.281
+ c-12.234-12.219-32.063-12.219-44.281,0L160.219,307.531C148,319.75,148,339.563,160.219,351.781z"/>
+ </g>
+ </svg>
diff --git a/assets/board/boards/misc.svg b/assets/board/boards/misc.svg
new file mode 100644
index 0000000..5b7ce6a
--- /dev/null
+++ b/assets/board/boards/misc.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 64 64" x="0px" y="0px"><title>x</title><path d="M52.207,27.889a3,3,0,0,0,4.22-.444l6.408-7.915c.019-.023.03-.049.047-.072a3.089,3.089,0,0,0-.061-3.721l-6.394-7.9a3,3,0,1,0-4.664,3.776l2.451,3.026H52.04A19.509,19.509,0,0,0,38.152,20.4l-7.236,7.235-7.236-7.24A19.779,19.779,0,0,0,9.789,14.642H3.609a3,3,0,0,0,0,6h6.18a13.738,13.738,0,0,1,9.649,3.992l7.236,7.24L19.18,39.368a13.557,13.557,0,0,1-9.647,3.995H3.525a3,3,0,1,0,0,6H9.533A19.511,19.511,0,0,0,23.422,43.61l7.493-7.493,7.492,7.5A19.516,19.516,0,0,0,52.3,49.363h1.232l-2.68,2.858a3,3,0,0,0,4.377,4.1l7.38-7.871a3.108,3.108,0,0,0,.111-3.981l-6.35-7.83a3,3,0,1,0-4.66,3.779l2.385,2.941H52.3a13.554,13.554,0,0,1-9.648-3.991l-7.494-7.5,7.237-7.237a13.553,13.553,0,0,1,9.646-4h2.174l-2.451,3.027A3,3,0,0,0,52.207,27.889Z"/></svg>
diff --git a/assets/board/boards/money.svg b/assets/board/boards/money.svg
new file mode 100644
index 0000000..23a025f
--- /dev/null
+++ b/assets/board/boards/money.svg
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+<![CDATA[
+ .st0{fill:#4B4B4B;}
+]]>
+</style>
+<g>
+ <path class="st0" d="M424.172,256.109c-0.078-11.109-0.172-24.078-0.266-36.203c-0.078-10.688-0.156-20.656-0.219-28.156
+ c-0.031-3.75-0.063-6.875-0.094-9.172c-0.031-1.141-0.047-2.078-0.063-2.797l-0.031-0.969c-0.016-0.328,0-0.469-0.063-1.188v-0.031
+ c-1.281-11.375-3.344-33.219-19-52.375c-7.828-9.563-19.016-18.156-34.141-24.125c-6.891-2.703-14.625-4.875-23.203-6.469
+ c5.484-8.797,8.719-19.125,8.719-30.25c0-31.813-25.781-57.594-57.594-57.594c-16.703,0-31.656,7.219-42.172,18.594
+ C245.531,13.969,230.5,6.781,213.75,6.781c-31.781,0-57.563,25.781-57.563,57.594c0,11.156,3.281,21.516,8.781,30.344
+ c-10.844,1.969-20.453,4.813-28.625,8.563c-20.609,9.375-32.828,24.094-39.297,38.313c-6.531,14.156-7.891,27.75-8.797,36v0.031
+ c-0.078,0.813-0.063,0.938-0.094,1.344c-0.078,2.531-0.141,9.906-0.219,20.125c-0.125,15.25-0.25,36.281-0.344,53.563
+ c0,1.25,0,2.438,0,3.656c-39,33.188-85.969,67.719-87.547,122.875C-1.781,444.156,49.141,489.5,108.813,496.906
+ c51.422,6.406,86.891,8.313,147.188,8.313c60.281,0,95.75-1.906,147.188-8.313c59.656-7.406,110.594-52.75,108.766-117.719
+ C510.375,323.906,463.203,289.375,424.172,256.109z M400.531,180.031v0.031l-0.016-0.031H400.531z M269.688,77.875
+ c0.375-1.547,0.656-3,0.875-4.375l0.016-0.063l0.063-0.406c0.078-0.594,0.188-1.156,0.266-1.75v-0.063
+ c0.25-2.125,0.453-4.406,0.453-6.844c0-2.031-0.125-4.031-0.328-6l0,0l-0.016-0.281l-0.172-1c-0.188-1.531-0.391-3.031-0.719-4.516
+ c0,0,0-0.047,0-0.063l-0.078-0.359l-0.203-0.719c-0.359-1.547-0.75-3.094-1.219-4.563c-0.016-0.031-0.016-0.031-0.016-0.031
+ l-0.016-0.125c6.016-10.125,17-16.922,29.625-16.906c9.578,0,18.156,3.844,24.453,10.125c6.25,6.281,10.109,14.844,10.125,24.438
+ c0,11.219-5.391,21.063-13.719,27.406c-2.297-0.063-4.609-0.125-6.984-0.125h-34.797c-3.516-2.688-6.5-5.984-8.75-9.781
+ c0.141-0.469,0.313-0.906,0.469-1.422c0.016-0.078,0.031-0.141,0.047-0.234c0.203-0.719,0.406-1.438,0.594-2.188
+ c0.031-0.094,0.031-0.156,0.063-0.25L269.688,77.875z M304.063,387.344c-3.188,5.969-7.578,10.969-13.125,15.047
+ c-5.563,4.078-12.234,7.125-19.984,9.109c-3.391,0.875-6.938,1.469-10.547,1.938v22.594h-26.938v-22.125
+ c-7.656-0.656-15-1.844-21.891-3.75c-10.547-2.875-24.359-14.531-24.359-14.531c-1.172-0.688-1.969-1.906-2.125-3.25
+ c-0.172-1.359,0.281-2.719,1.25-3.688l13.5-13.5c1.453-1.438,3.719-1.719,5.469-0.641c0,0,10.094,8.766,17.75,10.859
+ c7.656,2.063,15.25,3.125,22.813,3.125c9.563,0,17.469-1.688,23.719-5.063c6.281-3.391,9.406-8.656,9.406-15.844
+ c0-5.156-1.531-9.234-4.625-12.219c-3.094-2.969-8.313-4.844-15.656-5.656l-24.188-2.094c-14.313-1.406-25.344-5.375-33.094-11.938
+ c-7.781-6.563-11.656-16.5-11.656-29.813c0-7.375,1.5-13.953,4.484-19.719c2.984-5.75,7.063-10.625,12.234-14.625
+ c5.172-3.969,11.188-6.938,18.047-8.938c2.875-0.813,5.875-1.375,8.922-1.875v-19.438h26.938v19.031
+ c6.297,0.625,12.281,1.656,17.844,3.188c9.453,2.563,19.375,10.313,19.375,10.313c1.234,0.656,2.094,1.875,2.297,3.234
+ c0.219,1.422-0.234,2.797-1.234,3.797l-12.641,12.875c-1.359,1.344-3.453,1.719-5.156,0.813c0,0-7.484-5.344-13.984-7.031
+ c-6.469-1.688-13.25-2.531-20.422-2.531c-9.359,0-16.266,1.781-20.734,5.375c-4.484,3.594-6.703,8.25-6.703,14
+ c0,5.203,1.563,9.172,4.766,11.938c3.172,2.813,8.547,4.625,16.109,5.375l21.188,1.813c15.703,1.375,27.578,5.563,35.641,12.516
+ s12.078,17.109,12.078,30.422C308.828,374.406,307.25,381.375,304.063,387.344z M378.219,204.156
+ c-7.547-16.328,9.031-62.063-70.906-62.063c-24.031,0-38.188,0-46.328,0c0.141,0-1.047,0-4.984,0c-1.313,0-3,0-4.984,0
+ c-8.141,0-22.313,0-46.313,0c-79.969,0-63.359,45.734-70.906,62.063c-5.063,10.938-13.219,21.125-23.078,31.063
+ c0.063-7.813,0.094-15.75,0.156-23.094c0.047-8.906,0.109-16.938,0.156-22.875c0.047-2.953,0.078-5.391,0.094-7.125
+ c0.031-0.875,0.031-1.531,0.047-2l0.016-0.375c1.125-10.766,3.094-25.813,12.688-38.406c4.859-6.344,11.641-12.313,22.094-17.125
+ c10.438-4.813,24.641-8.391,44-9.281c5.047-0.234,9.328-3.719,10.609-8.594c1.266-4.875-0.766-10.031-5.047-12.688
+ c-9.828-6.156-16.313-16.938-16.313-29.281c0-9.594,3.844-18.156,10.125-24.438s14.844-10.125,24.406-10.125
+ c9.594,0,18.156,3.844,24.453,10.125c3.031,3.031,5.453,6.625,7.172,10.563l0.125,0.219c0.109,0.281,0.188,0.531,0.297,0.781
+ c0.703,1.813,1.313,3.656,1.734,5.594l0.031,0.156l0.031,0.172c0.031,0.078,0.031,0.203,0.063,0.313
+ c0.406,2.141,0.672,4.359,0.672,6.641c0,1.219-0.109,2.563-0.281,4l-0.234,1.531l0.016-0.063c-0.156,0.969-0.328,1.813-0.5,2.594
+ l-0.016,0.063l-0.406,1.469c-0.219,0.75-0.469,1.531-0.766,2.344l-0.641,1.625c-2.75,6.391-7.344,11.781-13.172,15.531
+ c-0.031,0.031-0.078,0.047-0.094,0.094c-0.438,0.25-0.813,0.578-1.188,0.906c-0.203,0.188-0.438,0.344-0.609,0.531
+ c-0.281,0.281-0.531,0.594-0.797,0.906c-0.203,0.281-0.453,0.531-0.641,0.781c-0.203,0.313-0.344,0.656-0.531,0.969
+ c-0.188,0.344-0.391,0.656-0.531,0.969c-0.125,0.313-0.203,0.656-0.313,0.969c-0.141,0.406-0.281,0.781-0.359,1.172
+ c-0.047,0.266-0.078,0.547-0.109,0.828c-0.063,0.5-0.125,0.969-0.141,1.469L227,103.188c0,0.219,0.063,0.469,0.078,0.719
+ c0.031,0.469,0.047,0.938,0.156,1.406c0.047,0.344,0.172,0.688,0.25,1.016c0.109,0.391,0.219,0.766,0.359,1.141
+ c0.156,0.406,0.375,0.75,0.563,1.125c0.156,0.25,0.25,0.531,0.406,0.781c0.031,0.031,0.063,0.063,0.094,0.125
+ c0.234,0.344,0.5,0.656,0.781,0.969c0.219,0.281,0.422,0.563,0.656,0.813c0.234,0.219,0.5,0.406,0.75,0.625
+ c0.313,0.266,0.609,0.563,0.953,0.781c0.281,0.188,0.578,0.313,0.859,0.5c0.359,0.188,0.703,0.406,1.094,0.563
+ c0.297,0.156,0.656,0.219,1,0.328c0.375,0.109,0.719,0.266,1.125,0.359c0.281,0.063,0.578,0.063,0.875,0.109
+ c0.453,0.047,0.922,0.141,1.375,0.141c0.063,0,0.094,0,0.141,0h31.641h41.938c3.344,0,6.563,0.109,9.797,0.266
+ c16.922,0.797,29.984,3.641,39.922,7.578c8.875,3.531,15.344,7.813,20.313,12.5c7.438,7,11.609,14.953,14.234,22.938
+ c2.563,7.844,3.453,15.531,4.141,21.813c0,0.188,0.016,0.75,0.031,1.594c0.141,7.219,0.297,30.844,0.469,53.563
+ C391.266,225.094,383.203,215,378.219,204.156z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/music.svg b/assets/board/boards/music.svg
new file mode 100644
index 0000000..44ceb47
--- /dev/null
+++ b/assets/board/boards/music.svg
@@ -0,0 +1,25 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M366.789,307.317c0-47.676-38.65-86.326-86.333-86.326c-1.966,0-3.872,0.194-5.787,0.344
+ c-1.84-14.581-3.619-28.75-5.287-42.12c20.249-14.611,40.594-28.698,55.863-43.742C379.823,81.719,364.075,0,298.918,0
+ c-65.157,0-66.518,71.131-64.081,89.862c1.301,9.915,4.793,39.906,8.232,65.172c-1.346,1.032-2.49,1.877-3.334,2.43
+ c-56.252,36.751-96.114,81.442-94.476,144.155c1.331,51.713,50.487,101.81,115.644,101.81c4.995,0.135,9.862-0.224,14.67-0.807
+ c0.613,4.77,1.167,8.936,1.623,12.21c5.697,40.722-8.958,66.787-27.689,72.485c-18.738,5.705-35.838-0.816-39.091-7.328
+ c-3.268-6.52,4.067-4.898,13.84-7.335c9.773-2.438,16.293-17.916,17.1-26.066c2.101-21.034-17.13-38.277-38.276-38.277
+ c-21.146,0-35.66,17.303-38.284,38.277c-1.623,13.033,1.63,23.628,7.335,33.401c16.286,23.62,43.167,35.838,73.3,30.941
+ c37.312-6.05,58.674-38.127,55.376-76.553c-0.568-6.67-2.034-19.643-4.067-36.646C337.628,383.518,366.789,344.749,366.789,307.317
+ z M259.273,93.937c-4.883-50.502,28.78-77.374,51.586-63.526c32.452,19.702-14.424,74.952-46.748,106.013
+ C261.853,117.67,260.126,102.723,259.273,93.937z M220.182,376.542c-40.722-21.983-44.789-85.51-20.361-130.314
+ c10.723-19.65,29.199-36.504,49.627-52.251c1.077,6.243,2.654,17.564,4.531,32.063c-32.975,12.965-53.231,49.021-43.742,83.214
+ c7.754,27.92,34.403,33.341,39.57,26.739c2.984-3.813-7.582-6.259-14.14-25.924c-4.71-14.132-3.267-30.44,9.766-41.02
+ c4-3.253,8.375-5.84,12.966-7.791c5.024,40.893,10.826,90.251,14.97,123.779C256.843,387.848,238.12,386.232,220.182,376.542z
+ M319.548,360.257c-4.943,6.684-13.878,13.444-25.109,18.416c-4.15-33.872-9.72-77.853-15.246-121.498
+ c11.523,0.165,23.501,4.172,34.658,12.681C344.799,293.469,333.396,341.526,319.548,360.257z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg>
diff --git a/assets/board/boards/ngmi.svg b/assets/board/boards/ngmi.svg
new file mode 100644
index 0000000..e5e6086
--- /dev/null
+++ b/assets/board/boards/ngmi.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M442.801,81.119C428.16,65.44,411.52,51.6,393.279,40.08C362.16,20.16,326.398,6.799,288,2
+ c-10.48-1.361-21.199-2-32-2c-10.801,0-21.52,0.639-32,2c-38.402,4.799-74.16,18.16-105.281,38
+ c-18.16,11.6-34.801,25.44-49.52,41.041C26.32,126.881,0,188.4,0,256c0,50.48,14.719,97.6,40.078,137.279
+ c11.52,18.16,25.36,34.801,40.961,49.52c38.48,36,88.08,60.32,142.961,67.201c10.48,1.359,21.199,2,32,2c10.801,0,21.52-0.641,32-2
+ c54.879-6.881,104.48-31.201,142.959-67.279c15.6-14.641,29.44-31.281,41.041-49.442C497.279,353.6,512,306.48,512,256
+ C512,188.48,485.68,126.959,442.801,81.119z M448.879,325.52l-128.48-73.76L288,233.199V196.56V53.44
+ c24.48,3.76,47.438,12,68.238,23.68c18.961,10.64,36,24.16,50.562,40c33.68,36.56,54.318,85.361,54.318,138.881
+ C461.119,280.4,456.801,303.84,448.879,325.52z M394.959,406.721C365.84,433.6,328.879,452.16,288,458.56V306.959l130.078,74.561
+ C411.119,390.56,403.359,398.959,394.959,406.721z M50.879,256c0-53.52,20.641-102.32,54.4-138.881
+ c14.561-15.84,31.6-29.44,50.561-40c20.718-11.76,43.758-19.92,68.16-23.68V196.56v36.639l-32.402,18.56L63.039,325.52
+ C55.119,303.84,50.879,280.4,50.879,256z M93.918,381.52L224,306.959V458.56c-40.801-6.4-77.762-24.961-106.881-51.84
+ C108.719,399.041,100.879,390.56,93.918,381.52z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/orient.svg b/assets/board/boards/orient.svg
new file mode 100644
index 0000000..a2a08ff
--- /dev/null
+++ b/assets/board/boards/orient.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M427.367,388.053h0.908c0,0,42.893-4.455,42.893-27.451c0-11.526-21.442-17.068-70.57-45.265
+ c-1.392-0.799-3.09-1.824-5.534-2.974v-20.032h-10.375v-23.086c17.732-3.961,49.559-12.882,49.559-25.916
+ c0-9.046-23.508-13.402-62.081-35.536c-1.266-0.728-3.566-1.68-7.151-2.749v-17.328h-11.911v-13.958
+ c12.666-9.343,40.486-31.108,28.772-41.69c-13.151-11.866-85.094-31.898-108.621-75.672c0-7.429,10.133-15.613-9.073-15.613V28.826
+ c4.438-2.74,7.402-7.644,7.402-13.25C271.585,6.971,264.605,0,256,0c-8.606,0-15.577,6.971-15.577,15.577
+ c0,5.606,2.965,10.51,7.402,13.25v11.956c-19.215,0-9.072,8.184-9.072,15.613c-23.527,43.774-95.48,63.805-108.622,75.672
+ c-11.722,10.582,16.098,32.347,28.763,41.69v13.958h-11.911v16.556c-3.53,1.374-5.578,2.623-7.142,3.521
+ c-38.572,22.134-62.09,26.49-62.09,35.536c0,13.034,31.836,21.955,49.568,25.916v23.086h-10.384v20.032
+ c-2.443,1.15-4.141,2.175-5.534,2.974c-49.118,28.197-70.569,33.739-70.569,45.265c0,22.996,42.893,27.451,42.893,27.451h0.908
+ v77.2H47.3V512h417.4v-46.748h-37.333V388.053z M183.543,465.252h-23.697v-34.908h23.697V465.252z M278.709,465.252h-47.152
+ v-34.908h47.152V465.252z M279.374,201.074h-46.748v-64.552h46.748V201.074z M352.153,465.252h-23.688v-34.908h23.688V465.252z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/physiognomy.jpg b/assets/board/boards/physiognomy.jpg
new file mode 100644
index 0000000..6c1a03e
--- /dev/null
+++ b/assets/board/boards/physiognomy.jpg
Binary files differ
diff --git a/assets/board/boards/physiognomy.svg b/assets/board/boards/physiognomy.svg
new file mode 100644
index 0000000..6c1a03e
--- /dev/null
+++ b/assets/board/boards/physiognomy.svg
Binary files differ
diff --git a/assets/board/boards/politics.svg b/assets/board/boards/politics.svg
new file mode 100644
index 0000000..aa5bc9b
--- /dev/null
+++ b/assets/board/boards/politics.svg
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M249.117,68.486h13.785c4.27,0,7.748-3.468,7.748-7.748V46.609c0-1.024-0.202-2.039-0.591-2.983l-6.892-16.546
+ c-1.209-2.886-4.033-4.766-7.166-4.766c-3.124,0-5.939,1.88-7.148,4.766l-6.892,16.546c-0.389,0.944-0.591,1.959-0.591,2.983
+ v14.129C241.369,65.017,244.828,68.486,249.117,68.486z"/>
+ <path class="st0" d="M380.598,323.453v-4.747c0-8.623-6.989-15.621-15.611-15.621h-6.328v-31.901
+ c3.441-2.463,5.718-6.478,5.718-11.04c0-7.51-6.081-13.59-13.581-13.59h-5.419v-26.793c7.775-0.15,14.032-6.478,14.032-14.278
+ c0-6.557-4.439-12.02-10.44-13.723c-1.562-43.18-32.546-78.85-73.502-87.569c1.183-0.98,1.968-2.444,1.968-4.113
+ c0-2.938-2.392-5.33-5.331-5.33h-0.865V83.4h0.865c2.939,0,5.331-2.383,5.331-5.331c0-2.947-2.392-5.33-5.331-5.33h-32.184
+ c-2.947,0-5.348,2.383-5.348,5.33c0,2.948,2.401,5.331,5.348,5.331h0.857v11.348h-0.857c-2.947,0-5.348,2.392-5.348,5.33
+ c0,1.668,0.785,3.133,1.978,4.113c-40.965,8.718-71.941,44.389-73.512,87.569c-6.009,1.703-10.44,7.166-10.44,13.723
+ c0,7.8,6.266,14.128,14.04,14.278v26.793h-5.418c-7.5,0-13.59,6.08-13.59,13.59c0,4.563,2.268,8.569,5.728,11.031v31.91h-6.328
+ c-8.631,0-15.629,6.998-15.629,15.621v4.747H0v19.945v13.299v99.738v16.634v16.617h512V473.07v-16.634v-99.738v-13.299v-19.945
+ H380.598z M56.118,423.192H37.824v-29.926h18.294V423.192z M104.319,423.192H86.034v-29.926h18.286V423.192z M305.79,219.796
+ h19.229v26.758H305.79V219.796z M226.587,219.796h19.238v26.758h-19.238V219.796z M186.999,219.796h19.229v26.758h-19.229V219.796z
+ M167.054,456.435h-22.29v-99.738h22.29V456.435z M190.37,303.085h-16.776v-29.369h16.776V303.085z M214.418,456.435h-22.292
+ v-99.738h22.292V456.435z M227.39,303.085h-16.785v-29.369h16.785V303.085z M261.781,456.435h-22.292v-99.738h22.292V456.435z
+ M264.402,303.085h-16.785v-29.369h16.785V303.085z M266.193,219.796h19.238v26.758h-19.238V219.796z M284.628,273.716h16.785
+ v29.369h-16.785V273.716z M309.144,456.435h-22.292v-99.738h22.292V456.435z M321.649,273.716h16.766v29.369h-16.766V273.716z
+ M356.506,456.435h-22.292v-99.738h22.292V456.435z M425.985,423.192h-18.294v-29.926h18.294V423.192z M474.186,423.192H455.9
+ v-29.926h18.286V423.192z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/public.svg b/assets/board/boards/public.svg
new file mode 100644
index 0000000..7c1a3c6
--- /dev/null
+++ b/assets/board/boards/public.svg
@@ -0,0 +1,23 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+
+ .st0{fill:#4B4B4B;}
+
+</style>
+<g>
+ <polygon class="st0" points="256,0 24,69.344 24,109.344 40,109.344 40,129.344 472,129.344 472,109.344 488,109.344 488,69.344
+ " style="fill: rgb(75, 75, 75);"></polygon>
+ <polygon class="st0" points="472,432 40,432 40,464 24,464 24,512 488,512 488,464 472,464 " style="fill: rgb(75, 75, 75);"></polygon>
+ <polygon class="st0" points="384,397.344 384,413.344 448,413.344 448,397.344 440,397.344 440,169.344 448,169.344 448,153.344
+ 384,153.344 384,169.344 392,169.344 392,397.344 " style="fill: rgb(75, 75, 75);"></polygon>
+ <polygon class="st0" points="277.344,397.344 277.344,413.344 341.344,413.344 341.344,397.344 333.344,397.344 333.344,169.344
+ 341.344,169.344 341.344,153.344 277.344,153.344 277.344,169.344 285.344,169.344 285.344,397.344 " style="fill: rgb(75, 75, 75);"></polygon>
+ <polygon class="st0" points="170.656,397.344 170.656,413.344 234.656,413.344 234.656,397.344 226.656,397.344 226.656,169.344
+ 234.656,169.344 234.656,153.344 170.656,153.344 170.656,169.344 178.656,169.344 178.656,397.344 " style="fill: rgb(75, 75, 75);"></polygon>
+ <polygon class="st0" points="64,397.344 64,413.344 128,413.344 128,397.344 120,397.344 120,169.344 128,169.344 128,153.344
+ 64,153.344 64,169.344 72,169.344 72,397.344 " style="fill: rgb(75, 75, 75);"></polygon>
+</g>
+</svg>
diff --git a/assets/board/boards/religion.svg b/assets/board/boards/religion.svg
new file mode 100644
index 0000000..c7105d6
--- /dev/null
+++ b/assets/board/boards/religion.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <polygon class="st0" points="304,154.664 304,0 208,0 208,154.664 56,154.664 56,250.664 208,250.664 208,512 304,512 304,250.664
+ 456,250.664 456,154.664 "/>
+</g>
+</svg>
diff --git a/assets/board/boards/science.svg b/assets/board/boards/science.svg
new file mode 100644
index 0000000..21d822d
--- /dev/null
+++ b/assets/board/boards/science.svg
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M116.969,304.69v108.845c0,31.88,25.946,57.841,57.845,57.841c31.896,0,57.858-25.962,57.858-57.841V303.54
+ C189.546,324.619,157.84,288.886,116.969,304.69z M142.668,350.656c0.013-6.394,5.214-11.58,11.617-11.563
+ c6.394,0.008,11.572,5.202,11.559,11.588c0,6.41-5.182,11.597-11.592,11.58C147.854,362.26,142.668,357.074,142.668,350.656z
+ M160.736,429.216c-4.878,0-8.822-3.961-8.822-8.843c0.003-4.865,3.961-8.827,8.842-8.819c4.878,0.017,8.823,3.97,8.81,8.843
+ C169.567,425.271,165.614,429.216,160.736,429.216z M208.818,388.633c0,5.194-4.216,9.41-9.415,9.402
+ c-5.202,0-9.41-4.216-9.41-9.426c0-5.194,4.224-9.41,9.426-9.402C204.622,379.207,208.822,383.423,208.818,388.633z"/>
+ <path class="st0" d="M460.557,286.716c0,0-66.192-124.254-69.569-130.599c-11.597-21.754-32.545-37.706-71.805-37.706h-45.896
+ V73.604c4.537-3.394,8.358-7.693,11.161-12.64c3.37-5.942,5.284-12.812,5.284-20.086c0-11.26-4.602-21.516-11.991-28.888
+ C270.374,4.586,260.114,0,248.874,0H100.758C89.502,0,79.246,4.586,71.874,11.975c-7.388,7.388-11.991,17.644-11.991,28.904
+ c0,7.274,1.936,14.144,5.288,20.086c2.815,4.948,6.637,9.246,11.169,12.64v44.806H64.803c-24.582,0-44.495,19.93-44.495,44.512
+ c0,13.864,6.32,26.233,16.26,34.394c-19.03,5.07-33.038,22.395-33.038,43.006c0,24.581,19.93,44.511,44.511,44.511h28.3v128.701
+ c0,27.137,11.058,51.784,28.871,69.602C123.026,500.946,147.672,512,174.81,512c27.149,0,51.8-11.054,69.61-28.863
+ c3.119-3.123,6.025-6.436,8.687-9.961c6.587-8.612,11.74-18.368,15.208-28.88c14.97,13.33,34.571,26.143,58.856,32.365
+ l181.299,20.307V288.114L460.557,286.716z M100.766,22.486H248.87c10.159,0,18.398,8.234,18.398,18.392
+ c0,7.027-3.945,13.116-9.722,16.224h-6.723H98.814h-6.739c-5.786-3.107-9.71-9.197-9.71-16.224
+ C82.365,30.72,90.6,22.486,100.766,22.486z M238.815,454.528c-13.507,21.047-37.122,35.01-64.005,35.01
+ c-41.96,0-76-34.032-76-76.004V284.834V118.411V71.328c0.649,0.033,1.298,0.057,1.947,0.057h148.117
+ c0.65,0,1.287-0.024,1.952-0.057v68.015l-5.762-4.454c-22.864-17.661-55.716-13.453-73.39,9.402
+ c-17.665,22.872-13.458,55.73,9.402,73.399l69.75,53.913v141.932C250.827,428.632,246.421,442.71,238.815,454.528z
+ M242.854,165.108l-31.25,44.865l-20.23-15.418c-11.912-9.205-14.115-26.382-4.911-38.298c5.211-6.739,13.101-10.602,21.639-10.602
+ c6.078,0,11.835,1.972,16.663,5.696L242.854,165.108z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/sex.svg b/assets/board/boards/sex.svg
new file mode 100644
index 0000000..8be269a
--- /dev/null
+++ b/assets/board/boards/sex.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M321.767,315.536c6-5.74,13.441-13.126,20.055-22.512c2.567-3.646,4.937-7.709,7.111-11.992
+ c10.165,11.055,24.929,17.236,43.18,17.236c26.008,0,54.89-31.788,57.788-54.906c-19.023,9.11-48.74,9.181-48.74-28.378
+ C401.161,137.968,404.224,0,255.996,0C107.768,0,110.83,137.968,110.83,214.984c0,37.559-29.716,37.488-48.732,28.378
+ c2.89,23.118,31.771,54.906,57.779,54.906c18.228,0,32.976-6.158,43.134-17.182c4.032,7.96,8.984,14.842,13.968,20.662
+ c4.606,5.394,9.244,9.961,13.236,13.788c2.488,2.37,4.677,4.433,6.457,6.181c0,10.464,0,18.574,0,25.086l-0.04,0.339
+ c-0.134,0.914-1.008,3.291-2.654,5.945c-2.425,4.016-6.386,8.748-10.606,12.559c-4.165,3.834-8.78,6.74-11.433,7.614
+ c-5.449,1.937-13.307,3.936-21.914,6.692c-12.898,4.173-27.834,10.11-39.984,22.064c-6.064,5.953-11.284,13.448-14.883,22.535
+ c-3.606,9.086-5.575,19.701-5.575,31.937c0,3.378,0.15,6.89,0.457,10.536v-0.008c0.276,3.071,1.425,5.449,2.638,7.284
+ c2.354,3.417,5.11,5.598,8.37,7.818c5.709,3.764,13.197,7.229,22.709,10.638c28.394,10.118,74.756,19.212,132.236,19.244
+ c46.693-0.008,86.118-6.055,114.433-13.709c14.182-3.85,25.551-8.055,34-12.394c4.244-2.204,7.764-4.386,10.756-6.992
+ c1.496-1.323,2.89-2.764,4.134-4.606c1.213-1.834,2.362-4.212,2.638-7.284c0.299-3.63,0.449-7.126,0.449-10.496
+ c0.023-16.314-3.544-29.756-9.717-40.449c-4.606-8.023-10.598-14.401-17.094-19.393c-9.756-7.504-20.544-12.04-30.402-15.426
+ c-9.85-3.354-18.945-5.654-24.945-7.921c-2.424-0.89-5.496-2.646-8.536-4.969c-4.574-3.464-9.094-8.22-12.149-12.622
+ c-1.535-2.196-2.708-4.307-3.402-5.976c-0.716-1.654-0.866-2.858-0.843-2.961c0-6.512,0-14.622,0-25.094
+ C317.098,319.968,319.295,317.905,321.767,315.536z M322.539,387.803c3.253,2.158,6.67,4,10.284,5.378
+ c6.953,2.575,14.716,4.567,22.56,7.134c11.795,3.803,23.432,8.827,31.669,16.953c4.15,4.086,7.567,8.913,10.079,15.181
+ c2.496,6.276,4.079,14.079,4.087,24.07c0,2.103-0.142,4.394-0.292,6.693c-2.094,1.803-7.771,5.024-15.842,8.118
+ c-12.197,4.748-29.992,9.67-51.93,13.338c-21.944,3.686-48.054,6.142-77.157,6.142c-44.834,0.007-82.629-5.858-108.897-12.976
+ c-13.11-3.536-23.371-7.433-29.835-10.78c-2.992-1.528-5.11-2.945-6.197-3.858c-0.15-2.3-0.299-4.599-0.299-6.709
+ c0.024-13.346,2.796-22.78,6.89-29.976c3.102-5.409,7.032-9.654,11.653-13.26c6.913-5.393,15.488-9.188,24.275-12.165
+ c8.788-3,17.622-5.118,25.402-7.834c3.701-1.331,7.094-3.324,10.386-5.56c6.126,7.835,12.126,13.598,18.095,17.449
+ c6.795,4.402,13.653,6.401,19.984,6.386c5.755,0.007,10.921-1.607,15.236-3.866c5.796-3.063,10.126-7.189,13.292-10.835
+ c0.81,0.929,1.669,1.882,2.638,2.85c2.842,2.819,6.37,5.725,10.693,7.985c4.307,2.259,9.472,3.874,15.228,3.866
+ c6.33,0.015,13.189-1.984,19.984-6.386C310.468,401.307,316.437,395.582,322.539,387.803z M200.28,378.74
+ c3.346-3.315,6.449-6.866,9.11-10.575c0.119-0.157,0.205-0.331,0.324-0.496l35.905,19.591c-0.78,0.921-1.638,1.874-2.614,2.802
+ c-2.064,2-4.504,3.89-7.126,5.221c-2.63,1.33-5.394,2.126-8.425,2.126c-3.433-0.016-7.41-0.984-12.331-4.134
+ C210.783,390.48,205.752,385.763,200.28,378.74z M266.382,387.252l35.78-19.512c2.716,3.906,5.905,7.646,9.449,11.126
+ c-5.426,6.961-10.426,11.63-14.733,14.409c-4.929,3.15-8.898,4.118-12.338,4.134c-3.126,0-5.969-0.843-8.678-2.26
+ C272.106,393.205,268.799,390.079,266.382,387.252z M307.13,300.228c-3.818,3.661-7.315,6.827-10.276,10.103l-2.716,3.024v4.063
+ c0,12.709,0,21.976,0,29.385c0.032,3.04,0.622,5.788,1.489,8.41l-39.631,21.622l-39.661-21.638c0.889-2.59,1.496-5.322,1.527-8.394
+ c0-7.409,0-16.676,0-29.385v-4.063l-2.716-3.024c-2.969-3.276-6.457-6.442-10.276-10.103c-5.717-5.464-12.079-11.866-17.386-19.409
+ c-5.212-7.401-9.33-15.779-11.149-25.488c1.488-6.087,2.268-12.732,2.268-19.858c0-38.527,0-79.26,0-79.26h154.787
+ c0,0,0,40.733,0,79.26c0,7.142,0.78,13.788,2.276,19.89c-2.418,12.96-9.079,23.645-16.749,32.622
+ C315.036,292.528,310.941,296.583,307.13,300.228z"/>
+ <path class="st0" d="M219.516,198.913c-5.527,0-10.008,4.481-10.008,10c0,5.527,4.48,10.008,10.008,10.008
+ c5.52,0,10.008-4.481,10.008-10.008C229.523,203.394,225.036,198.913,219.516,198.913z"/>
+ <path class="st0" d="M292.484,198.913c-5.52,0-10,4.481-10,10c0,5.527,4.48,10.008,10,10.008c5.528,0,10.008-4.481,10.008-10.008
+ C302.492,203.394,298.012,198.913,292.484,198.913z"/>
+ <path class="st0" d="M255.988,419.008c-5.512,0-10,4.48-10,10.008c0,5.52,4.488,10.008,10,10.008
+ c5.536,0,10.016-4.488,10.016-10.008C266.004,423.488,261.524,419.008,255.988,419.008z"/>
+ <path class="st0" d="M255.988,457.26c-5.512,0-10,4.489-10,10.008c0,5.528,4.488,10.009,10,10.009
+ c5.536,0,10.016-4.481,10.016-10.009C266.004,461.748,261.524,457.26,255.988,457.26z"/>
+ <path class="st0" d="M270.122,267.173H241.87c-2.599,0-4.709,2.111-4.709,4.709c0,2.599,2.11,4.709,4.709,4.709h28.252
+ c2.598,0,4.709-2.11,4.709-4.709C274.831,269.284,272.72,267.173,270.122,267.173z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/spinner.svg b/assets/board/boards/spinner.svg
new file mode 100644
index 0000000..a6763ca
--- /dev/null
+++ b/assets/board/boards/spinner.svg
@@ -0,0 +1 @@
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>.spinner_0XTQ{transform-origin:center;animation:spinner_y6GP .75s linear infinite}@keyframes spinner_y6GP{100%{transform:rotate(360deg)}}</style><path class="spinner_0XTQ" d="M12,23a9.63,9.63,0,0,1-8-9.5,9.51,9.51,0,0,1,6.79-9.1A1.66,1.66,0,0,0,12,2.81h0a1.67,1.67,0,0,0-1.94-1.64A11,11,0,0,0,12,23Z"/></svg> \ No newline at end of file
diff --git a/assets/board/boards/tech.svg b/assets/board/boards/tech.svg
new file mode 100644
index 0000000..846d58d
--- /dev/null
+++ b/assets/board/boards/tech.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+<![CDATA[
+ .st0{fill:#4B4B4B;}
+]]>
+</style>
+<g>
+ <polygon class="st0" points="219.363,109.356 113.285,237.075 0.003,250.793 85.082,139.59 "/>
+ <polygon class="st0" points="402.644,292.637 274.925,398.715 261.207,511.996 372.41,426.934 "/>
+ <path class="st0" d="M500.785,133.325c18.172-51.828,12.641-99.359-5.047-117.063c-17.703-17.688-65.234-23.219-117.047-5.047
+ L500.785,133.325z"/>
+ <path class="st0" d="M491.113,156.528L355.472,20.887c-23.219,11.266-46.531,27.469-67.719,49.672
+ C227.035,134.153,132.05,258.731,132.05,258.731l110.406,110.391l10.813,10.828c0,0,124.594-94.969,188.172-155.703
+ C463.645,203.059,479.848,179.747,491.113,156.528z M287.738,224.262c-21.219-21.219-21.219-55.609,0-76.844
+ c21.219-21.219,55.625-21.219,76.844,0c21.219,21.234,21.219,55.625-0.016,76.844C343.363,245.481,308.957,245.481,287.738,224.262
+ z"/>
+ <path class="st0" d="M190.925,391.2L178.8,379.075c-13.844,51.828-81.734,69.796-81.734,69.796s25.969-31.734,27.422-53.39
+ c1.844-27.516-8.656-17.313-21.641-11.547c-14.219,6.313-36.813,6.5-36.813,6.5s10.828-9.375,22.359-32.469
+ c7.906-15.813,26.156-24.188,41.844-27.453l-9.438-9.438c-18.406-13.797-47.547,0.078-61.609,24.969
+ c-11.328,20.016-31.5,68.156-53.359,69.296c13.813,11.5,33.344,17.234,57.484,6.906c24.141-10.359,29.906,0,10.344,19.531
+ c-12.688,12.703-58.625,28.734-59.766,52.875c26.438-5.734,80.078,3.219,118.406-14.938
+ C175.972,459.027,197.816,418.793,190.925,391.2z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/theory.svg b/assets/board/boards/theory.svg
new file mode 100644
index 0000000..5503b69
--- /dev/null
+++ b/assets/board/boards/theory.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M314.685,210.72c-8.365,0-15.028-1.612-20.383-4.096c-8.012-3.71-13.202-9.427-16.468-15.135
+ c-1.628-2.838-2.755-5.66-3.463-8.144c-0.708-2.476-0.987-4.656-0.979-5.956c0-2.484-2.007-4.491-4.483-4.491
+ c-2.476,0-4.484,2.007-4.484,4.491c0,1.613,0.198,3.39,0.593,5.347c0.69,3.43,1.973,7.378,4.088,11.466
+ c3.15,6.096,8.168,12.503,15.67,17.357c1.884,1.242,3.898,2.352,6.087,3.34c0.345,1.488,0.83,4.096,0.823,7.263
+ c0,2.294-0.255,4.845-0.946,7.469c-0.692,2.624-1.818,5.289-3.628,7.896c-1.39,2.048-0.896,4.828,1.143,6.235
+ c2.032,1.407,4.821,0.906,6.227-1.134c2.451-3.53,4.006-7.206,4.928-10.702c0.913-3.505,1.233-6.844,1.233-9.764
+ c0-1.456-0.082-2.83-0.197-4.063c4.31,0.995,9.032,1.587,14.238,1.587c2.476,0,4.484-2.006,4.484-4.483
+ C319.169,212.728,317.162,210.72,314.685,210.72z"/>
+ <path class="st0" d="M334.558,153.042c-2.155-1.201-4.878-0.461-6.103,1.703c-1.217,2.147-0.452,4.878,1.703,6.103
+ c3.306,1.892,5.314,3.981,6.663,6.145c-5.528,1.94-10.414,2.747-14.749,2.747c-6.326-0.008-11.499-1.678-15.876-4.244
+ c-4.352-2.558-7.864-6.07-10.537-9.698c-4.4-6.005-10.117-11.343-16.862-15.242c-6.745-3.882-14.535-6.317-22.908-6.317
+ c-7.329,0-15.053,1.892-22.719,6.095c-3.126,1.712-5.848,3.718-8.209,5.915c-9.32,3.586-17.34,4.886-24.142,4.886
+ c-9.681-0.017-16.904-2.6-21.74-5.15c-2.41-1.283-4.212-2.55-5.379-3.471c-0.584-0.468-1.02-0.83-1.284-1.077l-0.263-0.255
+ l-0.05-0.049c-1.719-1.76-4.541-1.81-6.326-0.1c-1.776,1.719-1.826,4.549-0.115,6.334c0.263,0.256,3.332,3.397,9.229,6.532
+ c2.582,1.365,5.741,2.706,9.394,3.8c-0.97,1.365-2.296,3.372-3.742,5.905c-2.772,4.895-5.956,11.771-7.568,19.858
+ c-0.502,2.442,1.078,4.795,3.504,5.28c2.427,0.494,4.779-1.094,5.264-3.521c1.358-6.818,4.154-12.889,6.597-17.191
+ c1.226-2.172,2.352-3.874,3.167-5.042c0.411-0.568,0.732-1.02,0.954-1.3c0.107-0.14,0.19-0.238,0.238-0.304l0.066-0.066
+ l0.008-0.016c0.404-0.502,0.675-1.07,0.831-1.678c2.278,0.296,4.672,0.461,7.214,0.461c4.705,0,9.871-0.559,15.431-1.818
+ c-2.772,5.931-3.899,12.133-3.908,17.809c0.017,5.708,1.103,10.907,3.053,15.037c1.06,2.229,3.734,3.192,5.963,2.13
+ c2.229-1.062,3.192-3.726,2.13-5.964c-1.242-2.584-2.197-6.68-2.18-11.204c-0.008-4.886,1.061-10.249,3.587-15.16
+ c2.541-4.902,6.473-9.369,12.585-12.725c6.441-3.538,12.61-4.985,18.409-5.002c6.622,0.017,12.856,1.924,18.433,5.133
+ c5.561,3.2,10.414,7.724,14.115,12.766c3.257,4.45,7.617,8.826,13.219,12.133c5.593,3.307,12.469,5.487,20.416,5.47
+ c5.256,0,10.964-0.937,17.117-3.026l0.008,0.313c0,2.196-0.345,4.194-0.683,5.61c-0.164,0.691-0.337,1.258-0.46,1.612
+ c-0.058,0.181-0.099,0.313-0.132,0.395l-0.024,0.066v0.008c-0.904,2.294,0.197,4.886,2.492,5.807
+ c2.303,0.913,4.911-0.205,5.832-2.492c0.123-0.321,1.908-4.804,1.933-11.005c0-3.554-0.617-7.732-2.698-11.853
+ C343.401,159.984,339.855,156.028,334.558,153.042z"/>
+ <path class="st0" d="M219.572,119.564c3.086-3.636,7.47-6.498,12.462-8.415c4.993-1.942,10.554-2.904,15.769-2.904
+ c5.067,0,9.797,0.929,13.252,2.55c2.262,1.036,4.918,0.05,5.946-2.188c1.037-2.246,0.058-4.919-2.18-5.938
+ c-5.001-2.32-10.891-3.356-17.019-3.365c-6.3,0-12.864,1.127-18.993,3.48c-6.103,2.352-11.779,5.947-16.056,11.006
+ c-1.612,1.883-1.374,4.705,0.51,6.3C215.155,121.702,217.993,121.456,219.572,119.564z"/>
+ <path class="st0" d="M288.782,0.457C178.362-6.338,85.38,63.128,87.485,176.304l-0.082,10.242l-47.972,84.716
+ c-2.583,4.565-2.814,10.101-0.625,14.872c2.188,4.771,6.531,8.201,11.68,9.221l29.646,8.176l9.311,89.824
+ c0.247,8.661,4.097,16.822,10.628,22.506c6.531,5.692,15.152,8.382,23.756,7.419l23.673,1.884c4.622-0.51,9.246,0.962,12.708,4.072
+ c3.463,3.093,5.446,7.526,5.446,12.174V512h200.302c0,0,0-34.226,0-47.881c0-13.663,4.721-44.887,13.654-59.184
+ c32.475-51.92,85.333-79.542,94.25-186.014C482.784,112.432,419.233,8.494,288.782,0.457z M422.046,183.049
+ c-4.491,7.42-11.754,12.042-19.684,13.408c-2.434,0.428-4.08,2.731-3.668,5.174c0.436,2.434,2.747,4.088,5.182,3.652
+ c1.818-0.313,3.611-0.765,5.38-1.333c1.908,3.956,2.862,8.209,2.862,12.445c0,4.524-1.077,9.015-3.142,13.078
+ c-2.057,4.056-5.1,7.667-9.098,10.48c-5.026,3.528-10.743,5.206-16.418,5.215c-0.452,0-0.897-0.049-1.341-0.058
+ c-0.099-0.749-0.19-1.489-0.321-2.221v-0.009c-0.978-5.19-3.01-9.944-5.782-14.074l-0.338-0.501l-0.46-0.395
+ c-3.389-2.912-7.889-7.683-11.36-12.544c-1.752-2.426-3.24-4.886-4.244-7.074c-1.012-2.196-1.481-4.105-1.464-5.232
+ c0-0.502,0.074-0.848,0.173-1.078c0.082-0.222,0.164-0.354,0.337-0.535c1.744-1.736,1.744-4.582,0-6.342
+ c-1.752-1.736-4.581-1.736-6.325,0c-1.103,1.086-1.926,2.401-2.427,3.792c-0.518,1.366-0.708,2.788-0.708,4.162
+ c0.016,3.101,0.954,6.046,2.27,8.958c1.999,4.352,4.976,8.67,8.209,12.618c3.036,3.702,6.252,7.033,9.148,9.583
+ c1.999,3.052,3.454,6.507,4.17,10.315c0.296,1.605,0.452,3.2,0.485,4.722v0.033c0,0.197,0.008,0.395,0.008,0.608
+ c0,6.762-2.41,13.17-6.548,18.212c-4.145,5.034-9.977,8.694-16.895,9.994c-1.802,0.345-3.595,0.51-5.356,0.51
+ c-9.5,0.008-18.286-4.771-23.566-12.355c2.846-2.887,5.273-6.268,7.115-10.11v0.008c2.295-4.746,3.504-9.78,3.718-14.764
+ c0.107-2.468-1.801-4.557-4.269-4.664c-2.484-0.115-4.566,1.809-4.681,4.277c-0.156,3.8-1.077,7.608-2.829,11.244l-0.008,0.017
+ c-1.884,3.89-4.5,7.148-7.626,9.723l-0.016,0.008c-5.149,4.203-11.64,6.523-18.277,6.523c-4.178,0-8.423-0.913-12.454-2.863
+ c-7.46-3.586-12.642-9.977-14.937-17.29h-0.008c-0.872-2.772-1.324-5.692-1.324-8.62c0-4.187,0.913-8.432,2.862-12.47
+ c1.078-2.229,0.132-4.91-2.097-5.972c-2.221-1.077-4.894-0.148-5.972,2.082c-2.533,5.264-3.759,10.866-3.759,16.361
+ c0,2.665,0.313,5.297,0.856,7.871c-3.496,1.909-7.436,3.134-11.697,3.438h-0.008c-0.699,0.05-1.382,0.082-2.073,0.082
+ c-6.729,0-12.955-2.336-17.891-6.293c-4.318-3.454-7.624-8.102-9.385-13.515c3.142-3.1,5.758-6.744,7.674-10.783
+ c1.053-2.238,0.098-4.903-2.138-5.956c-2.229-1.061-4.919-0.107-5.964,2.138c-1.769,3.752-4.352,7.083-7.502,9.74
+ c-4.491,3.792-10.151,6.227-16.451,6.68h-0.008c-0.699,0.049-1.382,0.082-2.064,0.082c-14.214,0-26.355-10.504-28.412-24.553
+ l-0.008-0.041v-0.024c-0.115-0.675-0.189-1.374-0.238-2.098c-0.049-0.683-0.074-1.39-0.074-2.081c0-1.802,0.173-3.586,0.494-5.306
+ c0.436-2.435-1.167-4.771-3.602-5.223c-2.418-0.436-4.762,1.152-5.223,3.586c-0.404,2.253-0.625,4.573-0.625,6.942l0.008,0.271
+ c-4.03-0.452-7.938-1.744-11.434-3.792c-4.426-2.582-8.185-6.366-10.784-11.22c-2.311-4.335-3.406-8.949-3.406-13.523
+ c0-5.906,1.835-11.704,5.216-16.55c1.308,1.842,2.78,3.578,4.433,5.206c3.784,3.71,8.16,6.457,12.791,8.25
+ c2.311,0.906,4.895-0.247,5.791-2.566c0.905-2.303-0.255-4.894-2.55-5.791c-3.545-1.366-6.869-3.454-9.748-6.284v-0.008
+ c-2.55-2.484-4.524-5.314-5.931-8.349c-1.809-3.85-2.714-8.036-2.714-12.19c0.007-7.288,2.722-14.51,8.2-20.103
+ c4.664-4.755,10.537-7.536,16.632-8.382h0.008h0.016c1.3-0.165,2.599-0.255,3.899-0.255c7.272,0.008,14.502,2.748,20.112,8.218
+ c1.769,1.719,4.598,1.702,6.334-0.074c1.728-1.76,1.695-4.59-0.066-6.326c-7.14-6.992-16.385-10.57-25.64-10.734
+ c1.044-4.286,3.052-8.274,5.865-11.631c3.907-4.655,9.246-8.094,15.629-9.566c2.172-0.485,4.31-0.732,6.44-0.732
+ c3.751,0,7.403,0.756,10.776,2.122c-0.954,3.34-1.481,6.844-1.481,10.48c0,2.467,2,4.466,4.475,4.466
+ c2.475,0,4.474-1.999,4.474-4.466c0-3.916,0.799-7.658,2.197-11.055c2.163-5.199,5.824-9.624,10.422-12.75
+ c4.614-3.126,10.134-4.943,16.13-4.943c8.637,0,16.345,3.775,21.625,9.804c4.45,5.059,7.124,11.672,7.124,18.944
+ c0,2.467,2.016,4.466,4.483,4.466c2.476,0,4.491-1.999,4.491-4.466c0-8.276-2.681-15.95-7.214-22.16
+ c2.32-3.208,5.273-5.939,8.694-7.962c4.277-2.517,9.254-3.973,14.593-3.973c6.152,0,11.803,1.917,16.467,5.19
+ c4.681,3.274,8.333,7.914,10.398,13.301h-0.008c1.218,3.2,1.884,6.638,1.884,10.266c0,2.468,2.015,4.474,4.483,4.474
+ c2.468,0,4.491-2.006,4.491-4.474c0-3.702-0.568-7.263-1.563-10.644c5.314-4.935,12.347-7.732,19.61-7.732
+ c3.792,0,7.642,0.749,11.359,2.336c5.182,2.246,9.345,5.791,12.314,10.118c2.97,4.335,4.713,9.418,5.018,14.682
+ c0.033,0.543,0.058,1.078,0.058,1.62c-0.017,3.801-0.766,7.634-2.361,11.36c-0.978,2.271,0.074,4.903,2.344,5.873
+ c2.278,0.979,4.902-0.066,5.889-2.336c1.662-3.866,2.616-7.856,2.937-11.861c4.392,0.312,8.669,1.645,12.454,3.882
+ c4.318,2.55,8.011,6.284,10.529,11.071c2.204,4.187,3.24,8.637,3.249,13.046c0,2.015-0.247,4.014-0.682,5.972
+ c-2.682-1.053-5.478-1.76-8.267-2.172c-2.435-0.337-4.714,1.374-5.042,3.825c-0.354,2.452,1.357,4.713,3.792,5.051
+ c2.821,0.402,5.593,1.209,8.242,2.459c0.461,0.766,1.168,1.399,2.056,1.786c0.543,0.238,1.127,0.354,1.695,0.354
+ c1.653,1.102,3.158,2.344,4.5,3.701l0.008,0.008c5.379,5.42,8.266,12.733,8.266,20.21
+ C426.233,173.252,424.892,178.385,422.046,183.049z"/>
+ <path class="st0" d="M375.522,143.452c-2.221-1.917-4.606-3.488-7.132-4.59c-2.534-1.119-5.199-1.785-7.921-1.785
+ c-2.476,0-4.475,2.007-4.475,4.483c0,2.476,1.999,4.475,4.475,4.475c1.645,0,3.718,0.568,5.922,1.835
+ c3.282,1.883,6.696,5.272,9.164,9.5c2.501,4.236,4.096,9.262,4.08,14.469c-0.017,5.717-1.818,11.689-6.704,17.619
+ c-1.563,1.9-1.3,4.73,0.608,6.301c1.909,1.588,4.738,1.308,6.31-0.584c6.144-7.428,8.768-15.653,8.76-23.336
+ c0-4.672-0.954-9.147-2.517-13.227C383.723,152.5,379.956,147.284,375.522,143.452z"/>
+ <path class="st0" d="M344.545,123.142c-12.314,0-22.193-4.54-29.037-10.471c-3.422-2.962-6.038-6.268-7.757-9.443
+ c-1.744-3.167-2.534-6.186-2.517-8.448c0-2.467-2.007-4.474-4.475-4.474c-2.476,0-4.483,2.007-4.483,4.474
+ c0.016,4.204,1.333,8.53,3.603,12.726c2.394,4.376,5.882,8.628,10.299,12.362c-0.889,1.234-2.114,2.846-3.694,4.549
+ c-3.406,3.726-8.324,7.847-14.206,9.945c-2.311,0.822-3.537,3.38-2.706,5.716c0.83,2.336,3.381,3.537,5.725,2.714
+ c7.971-2.862,13.926-8.085,17.981-12.536c1.802-1.974,3.2-3.791,4.245-5.239c7.403,4.269,16.558,7.091,27.021,7.091
+ c2.476,0,4.474-2.007,4.474-4.475C349.019,125.158,347.02,123.142,344.545,123.142z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/travel.svg b/assets/board/boards/travel.svg
new file mode 100644
index 0000000..202661d
--- /dev/null
+++ b/assets/board/boards/travel.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M507.068,194.059c-5.3-6.143-13.759-8.507-21.481-6.013l-59.859,17.264
+ c-11.406,3.695-23.81,2.792-34.574-2.507l-68.887-33.742l61.093-80.864c4.682-4.847,5.584-12.261,2.139-18.095
+ c-3.422-5.809-10.336-8.638-16.848-6.903L247.486,116.32l23.597,11.572l-16.23,8.115l-24.69-12.095L124.278,72.015
+ C65.799,43.262,18.154,52.695,3.16,83.208c-14.994,30.522,26.591,49.402,57.102,64.395l105.696,52.041l54.749,242.78
+ c1.877,8.982,10.003,15.28,19.224,14.828c9.172-0.464,16.633-7.509,17.632-16.669l33.956-179.158l73.569,36.226
+ c47.073,21.732,97.259,19.64,112.253-10.86l32.579-70.61C513.507,208.911,512.39,200.19,507.068,194.059z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/ui b/assets/board/boards/ui
new file mode 100644
index 0000000..e96ad71
--- /dev/null
+++ b/assets/board/boards/ui
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10 12V17" stroke="red" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M14 12V17" stroke="red" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M4 7H20" stroke="red" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M6 10V18C6 19.6569 7.34315 21 9 21H15C16.6569 21 18 19.6569 18 18V10" stroke="red" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M9 5C9 3.89543 9.89543 3 11 3H13C14.1046 3 15 3.89543 15 5V7H9V5Z" stroke="red" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</svg> \ No newline at end of file
diff --git a/assets/board/boards/urbit.svg b/assets/board/boards/urbit.svg
new file mode 100644
index 0000000..3a77787
--- /dev/null
+++ b/assets/board/boards/urbit.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="16" cy="16" r="13" fill="white" stroke="black" stroke-width="2"/>
+<path d="M22 14.0488H19.6306C19.4522 15.0976 18.9936 15.7317 18.1783 15.7317C16.7006 15.7317 15.8599 14 13.5669 14C11.3503 14 10.1783 15.3659 10 17.9756H12.3694C12.5478 16.9024 13.0064 16.2683 13.8471 16.2683C15.3248 16.2683 16.1146 18 18.4586 18C20.6242 18 21.8217 16.6341 22 14.0488Z" fill="black"/>
+</svg>
diff --git a/assets/board/boards/vip.svg b/assets/board/boards/vip.svg
new file mode 100644
index 0000000..48ef69d
--- /dev/null
+++ b/assets/board/boards/vip.svg
@@ -0,0 +1,94 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M61.653,40.3l130.992,21.523l-11.25,54.106h134.616l4.342-33.135l25.949,4.267l94.24-18.55
+ c3.616-0.696,6.203-3.889,6.173-7.566c-0.045-3.677-2.708-6.801-6.339-7.437L133.175,0L60.367,25.571
+ c-3.299,1.157-5.372,4.388-5.084,7.868C55.6,36.911,58.218,39.74,61.653,40.3z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M143.569,76.19c0.121-4.01-3.041-7.338-7.036-7.452c-3.994-0.122-7.338,3.034-7.459,7.036
+ c-0.106,4.002,3.041,7.346,7.051,7.466C140.119,83.346,143.463,80.184,143.569,76.19z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M136.125,111.686c3.994,0.113,7.338-3.041,7.444-7.051c0.121-3.994-3.041-7.338-7.036-7.452
+ c-3.994-0.105-7.338,3.049-7.459,7.059C128.968,108.244,132.115,111.565,136.125,111.686z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M136.125,140.138c3.994,0.106,7.338-3.034,7.444-7.042c0.121-3.995-3.041-7.339-7.036-7.46
+ c-3.994-0.09-7.338,3.042-7.459,7.058C128.968,136.682,132.115,140.025,136.125,140.138z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M136.049,171.224c5.447,0.16,10.001-4.138,10.168-9.592c0.151-5.478-4.146-10.017-9.608-10.168
+ c-5.462-0.167-10.016,4.138-10.168,9.6C126.29,166.526,130.587,171.088,136.049,171.224z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M121.131,72.702c0.121-4.002-3.026-7.346-7.036-7.459c-3.994-0.114-7.339,3.034-7.444,7.043
+ c-0.122,4.009,3.026,7.338,7.036,7.436C117.681,79.859,121.024,76.689,121.131,72.702z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M113.687,108.206c3.994,0.091,7.338-3.057,7.444-7.066c0.121-3.995-3.026-7.323-7.036-7.445
+ c-3.994-0.113-7.339,3.034-7.444,7.044C106.529,104.741,109.677,108.077,113.687,108.206z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M113.687,136.651c3.994,0.105,7.338-3.041,7.444-7.036c0.121-4.009-3.026-7.353-7.036-7.466
+ c-3.994-0.106-7.339,3.034-7.444,7.044C106.529,133.201,109.677,136.53,113.687,136.651z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M113.611,167.744c5.462,0.152,10.017-4.161,10.168-9.607c0.151-5.477-4.145-10.017-9.608-10.176
+ c-5.462-0.159-10.001,4.153-10.168,9.608C103.851,163.023,108.149,167.593,113.611,167.744z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M98.692,69.214c0.122-4.01-3.026-7.353-7.036-7.452c-3.994-0.122-7.338,3.034-7.444,7.02
+ c-0.121,4.017,3.042,7.353,7.036,7.459C95.242,76.356,98.587,73.209,98.692,69.214z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M91.248,104.71c3.994,0.114,7.339-3.056,7.444-7.043c0.122-4.002-3.026-7.346-7.036-7.46
+ c-3.994-0.121-7.338,3.034-7.444,7.044C84.091,101.261,87.254,104.582,91.248,104.71z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M91.248,133.148c3.994,0.114,7.339-3.026,7.444-7.028c0.122-4.002-3.026-7.354-7.036-7.46
+ c-3.994-0.106-7.338,3.026-7.444,7.05C84.091,129.706,87.254,133.042,91.248,133.148z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M91.172,164.249c5.462,0.159,10.016-4.146,10.168-9.6c0.152-5.462-4.145-10.024-9.608-10.176
+ c-5.447-0.143-10.001,4.146-10.168,9.615C81.413,159.558,85.71,164.097,91.172,164.249z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M76.269,65.712c0.106-4.01-3.041-7.338-7.051-7.444c-3.994-0.121-7.338,3.026-7.444,7.028
+ c-0.121,4.01,3.041,7.346,7.036,7.459C72.819,72.861,76.148,69.714,76.269,65.712z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M68.809,101.208c4.01,0.113,7.338-3.034,7.459-7.043c0.106-3.994-3.041-7.339-7.051-7.452
+ c-3.994-0.106-7.338,3.048-7.444,7.042C61.653,97.765,64.815,101.102,68.809,101.208z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M68.809,129.676c4.01,0.098,7.338-3.057,7.459-7.051c0.106-4.01-3.041-7.338-7.051-7.452
+ c-3.994-0.121-7.338,3.034-7.444,7.044C61.653,126.211,64.815,129.554,68.809,129.676z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M68.733,160.762c5.462,0.159,10.017-4.146,10.168-9.608c0.152-5.462-4.145-10.009-9.608-10.16
+ c-5.462-0.166-10.001,4.138-10.168,9.585C58.975,156.063,63.272,160.602,68.733,160.762z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M369.49,107.479c3.994-0.106,7.156-3.464,7.036-7.46c-0.106-3.994-3.45-7.149-7.444-7.028
+ c-4.01,0.106-7.157,3.435-7.051,7.444C362.151,104.438,365.48,107.585,369.49,107.479z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M369.49,135.932c3.994-0.114,7.156-3.443,7.036-7.452c-0.106-3.995-3.45-7.164-7.444-7.044
+ c-4.01,0.113-7.157,3.458-7.051,7.452C362.151,132.899,365.48,136.046,369.49,135.932z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M369.49,164.4c3.994-0.121,7.156-3.465,7.036-7.46c-0.106-4.01-3.45-7.164-7.444-7.043
+ c-4.01,0.114-7.157,3.457-7.051,7.452C362.151,161.344,365.48,164.499,369.49,164.4z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M369.566,195.486c5.462-0.152,9.759-4.698,9.608-10.16c-0.151-5.47-4.706-9.775-10.168-9.608
+ c-5.462,0.152-9.76,4.698-9.608,10.168C359.549,191.34,364.103,195.645,369.566,195.486z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M391.929,103.977c3.994-0.098,7.156-3.443,7.036-7.437c-0.106-4.01-3.45-7.157-7.445-7.05
+ c-4.009,0.113-7.171,3.45-7.05,7.466C384.59,100.943,387.919,104.098,391.929,103.977z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M391.929,132.452c3.994-0.122,7.156-3.457,7.036-7.467c-0.106-4.002-3.45-7.156-7.445-7.036
+ c-4.009,0.091-7.171,3.442-7.05,7.444C384.59,129.396,387.919,132.551,391.929,132.452z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M391.929,160.897c3.994-0.113,7.156-3.442,7.036-7.46c-0.106-4.002-3.45-7.141-7.445-7.036
+ c-4.009,0.114-7.171,3.458-7.05,7.467C384.59,157.864,387.919,161.011,391.929,160.897z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M392.003,191.998c5.462-0.159,9.76-4.706,9.609-10.176c-0.152-5.454-4.706-9.759-10.184-9.6
+ c-5.447,0.152-9.744,4.69-9.593,10.16C381.988,187.845,386.542,192.142,392.003,191.998z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M414.367,100.497c3.994-0.114,7.156-3.465,7.036-7.467c-0.106-4.002-3.45-7.134-7.445-7.021
+ c-4.01,0.106-7.172,3.435-7.05,7.445C407.029,97.456,410.357,100.595,414.367,100.497z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M414.367,128.957c3.994-0.121,7.156-3.458,7.036-7.467c-0.106-3.994-3.45-7.149-7.445-7.036
+ c-4.01,0.121-7.172,3.45-7.05,7.467C407.029,125.908,410.357,129.078,414.367,128.957z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M414.367,157.41c3.994-0.113,7.156-3.457,7.036-7.46c-0.106-4.009-3.45-7.148-7.445-7.028
+ c-4.01,0.098-7.172,3.435-7.05,7.444C407.029,154.369,410.357,157.516,414.367,157.41z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M414.442,188.495c5.462-0.159,9.76-4.706,9.593-10.168c-0.136-5.455-4.705-9.744-10.168-9.608
+ c-5.447,0.159-9.744,4.713-9.593,10.183C404.426,184.358,408.98,188.662,414.442,188.495z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M436.805,97.009c3.995-0.122,7.157-3.45,7.036-7.467c-0.106-3.987-3.45-7.142-7.459-7.043
+ c-3.995,0.128-7.157,3.45-7.036,7.459C429.467,93.976,432.796,97.122,436.805,97.009z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M436.805,125.462c3.995-0.113,7.157-3.457,7.036-7.452c-0.106-4.002-3.45-7.156-7.459-7.043
+ c-3.995,0.098-7.157,3.443-7.036,7.467C429.467,122.428,432.796,125.583,436.805,125.462z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M436.805,153.922c3.995-0.113,7.157-3.457,7.036-7.466c-0.106-3.994-3.45-7.15-7.459-7.028
+ c-3.995,0.106-7.157,3.434-7.036,7.452C429.467,150.874,432.796,154.028,436.805,153.922z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M436.881,185.008c5.462-0.151,9.76-4.706,9.593-10.182c-0.151-5.44-4.706-9.744-10.168-9.585
+ c-5.447,0.151-9.744,4.698-9.593,10.16C426.864,180.87,431.419,185.174,436.881,185.008z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M239.874,222.668h-33.65C228.663,248.2,239.874,222.668,239.874,222.668z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M181.531,222.668h-26.176C172.816,248.2,181.531,222.668,181.531,222.668z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M257.638,189.23c0,0-15.962,7.974-24.935,9.971c-13.633,3.034-24.088,7.247-24.935,12.959
+ C218.737,211.168,252.645,211.168,257.638,189.23z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M172.363,200.471c-5.916-1.649-16.448-8.231-16.448-8.231c3.299,18.104,25.677,18.104,32.909,18.921
+ C188.264,206.448,181.381,202.968,172.363,200.471z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M358.248,307.497c0,0-28.135,61.914-212.001,129.456c-20.638-13.133-33.771-60.242-33.771-82.559
+ C61.819,410.255,39.441,467.774,44.797,512c35.98,0,56.149,0,73.307,0h16.886h332.227C467.217,512,484.149,379.185,358.248,307.497
+ z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M148.487,391.153c3.994,0.998,119.092-41.533,151.577-74.79c41.881-42.872,40.882-78.777,40.882-100.708
+ c0-21.947-7.974-83.77-55.846-83.77H176.417c0,0-12.966,6.975-11.968,19.942c12.952-2.996,29.913,2.996,36.888,15.963
+ c16.946-23.929,47.873-25.934,62.822-9.971c14.964,15.948,13.965,43.871,1.997,52.844c5.992,10.977,17.944,31.91,10.969,59.841
+ c-6.975,27.916-29.913,35.889-34.906,35.889c-4.978,0-10.969-43.878-57.829-32.901c-31.91-9.979-43.878,4.986-45.875,17.945
+ c-1.998,12.966,5.855,38.235,7.974,53.857C149.485,367.224,144.492,390.162,148.487,391.153z M310.095,219.255
+ c10.425-1.15,15.086,26.547-11.56,38.19C298.535,257.445,299.685,220.414,310.095,219.255z M179.398,279.475
+ c0,0,7.988,0.998,14.964,8.972c6.975,7.982,11.969,22.937,34.906,22.937c0,1.99-32.924,20.94-51.867,27.916
+ c0-8.979-23.922-22.937-25.918-32.908C165.448,297.428,174.42,281.464,179.398,279.475z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg>
diff --git a/assets/board/boards/war.svg b/assets/board/boards/war.svg
new file mode 100644
index 0000000..69d1e11
--- /dev/null
+++ b/assets/board/boards/war.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+<![CDATA[
+ .st0{fill:#4B4B4B;}
+]]>
+</style>
+<g>
+ <polygon class="st0" points="328.266,174.063 325.063,134.625 312.391,135.688 315.594,175.094 "/>
+ <polygon class="st0" points="449.719,154.344 448.078,134.125 332.906,143.406 334.531,163.594 "/>
+ <polygon class="st0" points="512,154.625 509.406,122.938 453.656,129.656 455.875,157.031 "/>
+ <path class="st0" d="M430.313,358.813h-41.953c2.625,9.094,11.031,15.75,20.984,15.75
+ C419.281,374.563,427.688,367.906,430.313,358.813z"/>
+ <path class="st0" d="M434.625,365.969c-3.281,4.609-7.938,9.063-12.625,12.938c-2.344,1.938-4.688,3.719-6.875,5.344
+ c-2.203,1.625-4.219,3.094-6,4.453c-0.031,0-0.031,0.016-0.031,0.016l-8.906,6.375c-5.469,3.875-11.563,6.828-18.016,8.813
+ c-6.453,1.969-13.297,2.969-20.172,2.969H116.047c-6.891,0-13.734-1-20.172-2.969c-6.469-1.984-12.563-4.938-18.047-8.844
+ l-0.141-0.094l-8.75-6.25l-0.031-0.016c-1.359-1.047-2.859-2.141-4.438-3.313c-2.813-2.078-5.969-4.422-9.094-7.047
+ c-2.344-1.953-4.656-4.063-6.797-6.25c-3.203-3.281-5.906-6.781-7.719-10.219c-0.547-1.031-1.016-2.063-1.391-3.063H17.797
+ c0.234,1.25,0.5,2.5,0.844,3.719c1.656,5.891,4.469,11.078,7.734,15.625c4.891,6.844,10.844,12.375,16.328,16.938
+ c2.734,2.25,5.375,4.25,7.703,5.969c2.328,1.734,4.375,3.219,5.813,4.313l0.125,0.094l9.313,6.672l0.031,0.016
+ c7.391,5.266,15.531,9.172,24.031,11.781c8.531,2.609,17.406,3.906,26.328,3.906H362c8.906,0,17.781-1.297,26.297-3.906
+ s16.672-6.516,24.063-11.781l9.328-6.688l0.125-0.094c1.109-0.844,2.547-1.891,4.203-3.109c2.891-2.141,6.422-4.766,10.094-7.844
+ c2.781-2.297,5.641-4.891,8.422-7.734c4.125-4.297,8.109-9.234,11.188-15c1.516-2.906,2.813-6,3.719-9.313
+ c0.313-1.172,0.594-2.359,0.813-3.563h-21.688C437.688,361.156,436.344,363.563,434.625,365.969z"/>
+ <path class="st0" d="M68.688,374.563c9.969,0,18.375-6.656,20.969-15.75H47.719C50.344,367.906,58.75,374.563,68.688,374.563z"/>
+ <path class="st0" d="M165.656,364.953c0-2.109-0.219-4.172-0.594-6.141h-61.688c-0.406,1.969-0.625,4.031-0.625,6.141
+ c0,17.375,14.094,31.453,31.469,31.453C151.563,396.406,165.656,382.328,165.656,364.953z"/>
+ <path class="st0" d="M235.531,364.953c0-2.109-0.219-4.172-0.625-6.141H173.25c-0.406,1.969-0.609,4.031-0.609,6.141
+ c0,17.375,14.078,31.453,31.422,31.453C221.453,396.406,235.531,382.328,235.531,364.953z"/>
+ <path class="st0" d="M305.406,364.953c0-2.109-0.203-4.172-0.594-6.141h-61.688c-0.406,1.969-0.625,4.031-0.625,6.141
+ c0,17.375,14.094,31.453,31.469,31.453C291.313,396.406,305.406,382.328,305.406,364.953z"/>
+ <path class="st0" d="M375.281,364.953c0-2.109-0.219-4.172-0.625-6.141h-61.672c-0.391,1.969-0.594,4.031-0.594,6.141
+ c0,17.375,14.078,31.453,31.453,31.453C361.203,396.406,375.281,382.328,375.281,364.953z"/>
+ <path class="st0" d="M302.531,168.938c0-51.703-41.906-84.781-93.625-84.781c-51.688,0-93.609,33.078-93.609,84.781v45.75h187.234
+ V168.938z"/>
+ <path class="st0" d="M455.094,264.188l-29.375-24.313c-10.125-8.375-22.844-12.969-35.969-12.969H68.859
+ c-17.766,0-34.516,8.375-45.172,22.609l-12.406,16.547C3.953,275.828,0,287.703,0,299.922v44.453h475.563v-36.703
+ C475.563,290.844,468.063,274.906,455.094,264.188z"/>
+</g>
+</svg>
diff --git a/assets/board/boards/wyb.svg b/assets/board/boards/wyb.svg
new file mode 100644
index 0000000..06b5abd
--- /dev/null
+++ b/assets/board/boards/wyb.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="2500" height="2500" viewBox="0 0 192.756 192.756"><g fill-rule="evenodd" clip-rule="evenodd"><path fill="#fff" d="M0 0h192.756v192.756H0V0z"/><path d="M151.174 65.14c1.828-10.239-4.998-18.285-12.924-24.136-11.092-8.167-23.646-13.043-36.568-16.822v135.066c5.729-4.997 11.459-10.605 16.943-16.335 11.703-12.921 22.553-26.086 27.062-41.934 1.828-7.191.854-15.359-5.242-20.235 5.243-4.145 9.996-9.265 10.729-15.604zm-22.309 46.688c-4.023 7.314-9.508 14.019-15.971 20.235l-.121-38.643c4.389-3.169 8.898-5.973 14.385-6.461 2.195 0 4.145.731 5.607 2.438 4.878 7.68-.853 15.726-3.9 22.431zm11.094-49.736c-1.098 6.095-7.803 9.63-12.557 12.19-4.754 2.438-9.631 4.388-14.629 6.216V41.003c7.682 2.316 14.629 6.217 21.211 10.85 3.049 2.56 7.194 5.729 5.975 10.239zM91.686 158.272V23.693l-10.849 5.608v72.166c-.487 2.071.975 5.241-1.341 6.216-.61.122-1.097-.121-1.341-.608-4.632-17.433-6.583-35.839-7.436-54.734l-.366-16.457-10.361 7.68v4.388c.609 17.433 1.829 34.498 5.12 50.833l-4.144 4.633c-1.585-2.194-2.56-4.511-3.658-6.827-5.241-13.896-7.192-29.134-7.923-44.859l-9.021 6.705c.854 23.893 5.364 46.444 19.87 64.363 2.804-3.169 5.608-6.461 8.412-9.508 1.463 6.461 3.535 12.678 5.973 18.772 4.021 9.386 8.532 18.894 17.065 26.208z"/><path d="M174.699 41.369l-16.213-4.022-2.926-10.971-16.578-3.901-3.412-11.946L96.44 1.63l-38.399 8.898-3.413 11.946-16.579 3.901c-1.097 3.778-2.072 7.436-3.048 11.093l-16.213 3.9c-1.219 34.498 8.29 64.851 25.478 91.913 12.556 19.382 31.451 39.862 52.174 49.979 14.017-6.705 26.453-17.92 37.667-30.476 27.184-31.448 42.055-68.262 40.592-111.415zm-47.785 104.348c-8.898 9.996-18.895 19.869-30.109 25.599-10.727-5.364-20.113-14.628-28.646-24.015-22.186-25.965-36.936-54.977-39.374-88.987-.244-2.804-.365-5.485-.244-8.411l13.775-3.169 3.169-11.337 16.945-4.022.122-.366 3.047-11.703 30.719-7.192 31.694 7.192 3.047 11.946 17.189 4.145 2.926 11.337 13.896 3.169c-.367 37.057-15.117 68.142-38.156 95.814zM132.035 181.921c1.828-.122 3.047-1.097 3.047-3.17 0-2.315-1.463-3.413-4.268-3.413h-4.387v11.702h1.949v-4.997h1.828l3.049 4.997h2.072l-3.29-5.119zm-3.658-1.463v-3.535h2.316c1.098 0 2.438.243 2.438 1.706 0 1.585-1.219 1.829-2.682 1.829h-2.072z"/><path d="M130.57 171.56c-5.484 0-9.994 4.51-9.994 9.995s4.51 9.996 9.994 9.996c5.486 0 9.998-4.511 9.998-9.996s-4.511-9.995-9.998-9.995zm0 19.016a9 9 0 0 1-9.02-9.021 9 9 0 0 1 9.02-9.021c5 0 9.021 4.022 9.021 9.021a8.998 8.998 0 0 1-9.021 9.021z"/></g></svg>
diff --git a/assets/board/boards/zh.svg b/assets/board/boards/zh.svg
new file mode 100644
index 0000000..1c500df
--- /dev/null
+++ b/assets/board/boards/zh.svg
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M202.2,395.191c-0.008-0.044,0-0.08-0.008-0.116c-0.015-0.044-0.044-0.081-0.044-0.081L202.2,395.191z"/>
+ <path class="st0" d="M511.033,90.971c-0.757-0.582-1.768-0.698-2.635-0.283l-17.357,8.267c-1.892,0.902-4.075,0.976-6.025,0.204
+ l-25.558-10.13c-1.776-0.698-3.217-2.052-4.039-3.776l-13.704-28.87c-1.004-2.125-2.947-3.66-5.247-4.155l-24.256-5.124
+ c-1.848-0.393-3.784-0.08-5.414,0.895l-13.471,7.998c-1.87,1.113-3.166,2.976-3.573,5.102l-8.245,44.006l-4.716-3.144
+ c-1.892-1.259-4.25-1.601-6.412-0.931c-2.176,0.669-3.93,2.277-4.781,4.388l-3.893,9.621c-0.902,2.242-0.691,4.774,0.582,6.827
+ c1.274,2.038,3.45,3.362,5.866,3.544l5.655,0.415l4.156-2.591c3.078-1.928,7.11-1.382,9.562,1.31l8.777,9.578l-60.047,27.043
+ c-3.289,1.484-5.072,5.094-4.257,8.602l1.208,5.145c0.866,3.741-1.208,7.539-4.818,8.835l-51.43,18.317
+ c-1.318,0.48-2.744,0.582-4.112,0.276l-57.171-12.204c-1.128-0.247-2.183-0.742-3.093-1.448l-29.015-22.793
+ c-1.747-1.383-4.018-1.907-6.208-1.456l-7.569,1.572c-2.03,0.422-4.162-0.007-5.866-1.201l-3.835-2.685
+ c-3.064-2.154-4.09-6.215-2.424-9.57l3.988-7.954c1.522-3.049,0.823-6.732-1.703-9.002l-26.599-23.892
+ c-2.416-2.176-5.968-2.547-8.791-0.931l-49.472,28.265c-2.364,1.346-3.813,3.857-3.813,6.564v20.901
+ c0,2.358-1.092,4.556-2.94,5.997l-18.31,14.074c-1.194,0.918-2.635,1.456-4.149,1.558l-38.782,2.3
+ c-2.176,0.131-4.192,1.194-5.531,2.926c-1.332,1.718-1.848,3.937-1.419,6.084l7.234,36.671c0.357,1.798,1.353,3.413,2.809,4.52
+ l15.5,11.891l3.938-2.373c2.918-1.739,6.644-1.332,9.111,1.034l4.141,3.959c2.962,2.824,3.122,7.488,0.379,10.523l-15.349,16.956
+ c-1.412,1.572-2.11,3.654-1.921,5.749l0.691,7.562c0.131,1.426,0.655,2.772,1.521,3.908l9.738,12.692
+ c1.587,2.074,4.141,3.173,6.739,2.918l4.235-0.429c2.176-0.218,4.33,0.516,5.924,2.008l34.349,32.239
+ c1.063,0.997,2.394,1.659,3.821,1.921l50.644,9.162c1.812,0.335,3.69-0.022,5.269-0.983l24.263-14.744
+ c2.176-1.324,4.862-1.456,7.154-0.371l26.941,12.78c2.628,1.251,4.316,3.915,4.316,6.834v13.165c0,1.79-0.64,3.53-1.805,4.89
+ l-5.931,6.979c-1.448,1.704-2.052,3.959-1.666,6.172c0.721,3.508,3.784,6.04,7.379,6.04h-2.99c3.856,0,7.102,2.918,7.518,6.754
+ l0.648,6.106c0.247,2.35,1.586,4.447,3.602,5.662l27.319,16.476c0.779,0.473,1.747,0.487,2.54,0.036
+ c0.786-0.444,1.281-1.281,1.281-2.191v-10.479c0-3.937,3.013-7.212,6.935-7.525l30.624-2.482c3.624-0.29,6.936,2.038,7.896,5.531
+ l0.597,2.212c0.793,2.896,3.224,5.05,6.208,5.487l21.57,3.129c3.544,0.524,6.826,0.444,6.826,0.444
+ c0.218,3.66-1.266,10.975,2.372,11.404l3.398,0.298c2.147,0.255,2.023-0.669,2.824-2.671c0.888-2.213,1.325-3.682,1.325-5.829
+ c0-2.162,1.987-2.889,4.963-3.966l37.668-13.748c0.779-0.284,1.506-0.706,2.154-1.23l34.641-28.026
+ c1.098-0.895,1.929-2.088,2.394-3.42l22.728-66.036c0.888-2.569,0.327-5.406-1.463-7.437l-30.238-34.495
+ c-2.664-3.034-2.467-7.627,0.451-10.422l21.301-20.442c1.579-1.528,2.431-3.654,2.315-5.852l-0.408-7.794l-18.332,3.238
+ c-1.179,0.211-2.3,0.698-3.26,1.434l-5.924,4.505c-2.918,2.227-7.015,2.023-9.708-0.473l-6.172-5.742
+ c-1.506-1.39-2.38-3.333-2.416-5.386s0.764-4.032,2.212-5.48l25.238-25.246l6.521,1.186l-2.089,10.894
+ c-0.182,1.011-0.167,2.052,0.052,3.056l1.12,5.036c0.19,0.859,0.822,1.565,1.666,1.849c0.837,0.276,1.768,0.087,2.438-0.488
+ l64.253-55.148c2.198-1.892,3.122-4.876,2.379-7.677l-2.364-8.857c-0.706-2.664,0.087-5.51,2.081-7.408l8.667-8.29
+ c1.121-1.07,1.878-2.459,2.184-3.988l6.834-34.175C512.139,92.522,511.782,91.56,511.033,90.971z"/>
+ <path class="st0" d="M346.577,443.746l-10.662,5.924c0,0-6.506,0-9.46,0c-2.969,0-6.521,4.141-6.521,8.878
+ c0,4.731,5.931,6.514,11.251,6.514c5.327,0,8.878-5.917,10.065-7.693c1.186-1.775,7.103-8.289,7.103-8.289
+ S348.353,441.978,346.577,443.746z"/>
+</g>
+</svg>
diff --git a/assets/board/lol.lol b/assets/board/lol.lol
new file mode 100644
index 0000000..c4cd6d8
--- /dev/null
+++ b/assets/board/lol.lol
@@ -0,0 +1 @@
+lmao
diff --git a/assets/board/octicons/bold-24.svg b/assets/board/octicons/bold-24.svg
new file mode 100644
index 0000000..3bf9678
--- /dev/null
+++ b/assets/board/octicons/bold-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M6 4.75c0-.69.56-1.25 1.25-1.25h5a4.75 4.75 0 013.888 7.479A5 5 0 0114 20.5H7.25c-.69 0-1.25-.56-1.25-1.25V4.75zM8.5 13v5H14a2.5 2.5 0 000-5H8.5zm0-2.5h3.751A2.25 2.25 0 0012.25 6H8.5v4.5z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/code-24.svg b/assets/board/octicons/code-24.svg
new file mode 100644
index 0000000..5613d91
--- /dev/null
+++ b/assets/board/octicons/code-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M8.78 4.97a.75.75 0 010 1.06L2.81 12l5.97 5.97a.75.75 0 11-1.06 1.06l-6.5-6.5a.75.75 0 010-1.06l6.5-6.5a.75.75 0 011.06 0zm6.44 0a.75.75 0 000 1.06L21.19 12l-5.97 5.97a.75.75 0 101.06 1.06l6.5-6.5a.75.75 0 000-1.06l-6.5-6.5a.75.75 0 00-1.06 0z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/code-square-24.svg b/assets/board/octicons/code-square-24.svg
new file mode 100644
index 0000000..3b784cc
--- /dev/null
+++ b/assets/board/octicons/code-square-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10.3 8.24a.75.75 0 01-.04 1.06L7.352 12l2.908 2.7a.75.75 0 11-1.02 1.1l-3.5-3.25a.75.75 0 010-1.1l3.5-3.25a.75.75 0 011.06.04zm3.44 1.06a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.908-2.7-2.908-2.7z"/><path fill-rule="evenodd" d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0120.25 22H3.75A1.75 1.75 0 012 20.25V3.75zm1.75-.25a.25.25 0 00-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 00.25-.25V3.75a.25.25 0 00-.25-.25H3.75z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/heading-24.svg b/assets/board/octicons/heading-24.svg
new file mode 100644
index 0000000..6f44213
--- /dev/null
+++ b/assets/board/octicons/heading-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M6.25 4a.75.75 0 01.75.75V11h10V4.75a.75.75 0 011.5 0v14.5a.75.75 0 01-1.5 0V12.5H7v6.75a.75.75 0 01-1.5 0V4.75A.75.75 0 016.25 4z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/image-24.svg b/assets/board/octicons/image-24.svg
new file mode 100644
index 0000000..164bb84
--- /dev/null
+++ b/assets/board/octicons/image-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M19.25 4.5H4.75a.25.25 0 00-.25.25v14.5c0 .138.112.25.25.25h.19l9.823-9.823a1.75 1.75 0 012.475 0l2.262 2.262V4.75a.25.25 0 00-.25-.25zm.25 9.56l-3.323-3.323a.25.25 0 00-.354 0L7.061 19.5H19.25a.25.25 0 00.25-.25v-5.19zM4.75 3A1.75 1.75 0 003 4.75v14.5c0 .966.784 1.75 1.75 1.75h14.5A1.75 1.75 0 0021 19.25V4.75A1.75 1.75 0 0019.25 3H4.75zM8.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/italic-24.svg b/assets/board/octicons/italic-24.svg
new file mode 100644
index 0000000..84a5b12
--- /dev/null
+++ b/assets/board/octicons/italic-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M10 4.75a.75.75 0 01.75-.75h8.5a.75.75 0 010 1.5h-3.514l-5.828 13h3.342a.75.75 0 010 1.5h-8.5a.75.75 0 010-1.5h3.514l5.828-13H10.75a.75.75 0 01-.75-.75z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/link-24.svg b/assets/board/octicons/link-24.svg
new file mode 100644
index 0000000..2fa1b17
--- /dev/null
+++ b/assets/board/octicons/link-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M14.78 3.653a3.936 3.936 0 115.567 5.567l-3.627 3.627a3.936 3.936 0 01-5.88-.353.75.75 0 00-1.18.928 5.436 5.436 0 008.12.486l3.628-3.628a5.436 5.436 0 10-7.688-7.688l-3 3a.75.75 0 001.06 1.061l3-3z"/><path d="M7.28 11.153a3.936 3.936 0 015.88.353.75.75 0 001.18-.928 5.436 5.436 0 00-8.12-.486L2.592 13.72a5.436 5.436 0 107.688 7.688l3-3a.75.75 0 10-1.06-1.06l-3 3a3.936 3.936 0 01-5.567-5.568l3.627-3.627z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/list-ordered-24.svg b/assets/board/octicons/list-ordered-24.svg
new file mode 100644
index 0000000..104e926
--- /dev/null
+++ b/assets/board/octicons/list-ordered-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M3.604 3.089A.75.75 0 014 3.75V8.5h.75a.75.75 0 010 1.5h-3a.75.75 0 110-1.5h.75V5.151l-.334.223a.75.75 0 01-.832-1.248l1.5-1a.75.75 0 01.77-.037zM8.75 5.5a.75.75 0 000 1.5h11.5a.75.75 0 000-1.5H8.75zm0 6a.75.75 0 000 1.5h11.5a.75.75 0 000-1.5H8.75zm0 6a.75.75 0 000 1.5h11.5a.75.75 0 000-1.5H8.75zM5.5 15.75c0-.704-.271-1.286-.72-1.686a2.302 2.302 0 00-1.53-.564c-.535 0-1.094.178-1.53.565-.449.399-.72.982-.72 1.685a.75.75 0 001.5 0c0-.296.104-.464.217-.564A.805.805 0 013.25 15c.215 0 .406.072.533.185.113.101.217.268.217.565 0 .332-.069.48-.21.657-.092.113-.216.24-.403.419l-.147.14c-.152.144-.33.313-.52.504l-1.5 1.5a.75.75 0 00-.22.53v.25c0 .414.336.75.75.75H5A.75.75 0 005 19H3.31l.47-.47c.176-.176.333-.324.48-.465l.165-.156a5.98 5.98 0 00.536-.566c.358-.447.539-.925.539-1.593z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/list-unordered-24.svg b/assets/board/octicons/list-unordered-24.svg
new file mode 100644
index 0000000..4cf9d4c
--- /dev/null
+++ b/assets/board/octicons/list-unordered-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M4 7a1 1 0 100-2 1 1 0 000 2zm4.75-1.5a.75.75 0 000 1.5h11.5a.75.75 0 000-1.5H8.75zm0 6a.75.75 0 000 1.5h11.5a.75.75 0 000-1.5H8.75zm0 6a.75.75 0 000 1.5h11.5a.75.75 0 000-1.5H8.75zM5 12a1 1 0 11-2 0 1 1 0 012 0zm-1 7a1 1 0 100-2 1 1 0 000 2z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/quote-24.svg b/assets/board/octicons/quote-24.svg
new file mode 100644
index 0000000..1a40fcb
--- /dev/null
+++ b/assets/board/octicons/quote-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M3 6.25a.75.75 0 01.75-.75h13.5a.75.75 0 010 1.5H3.75A.75.75 0 013 6.25zM3.75 11a.75.75 0 01.75.75v7a.75.75 0 01-1.5 0v-7a.75.75 0 01.75-.75zM8 12.313a.75.75 0 01.75-.75h11.5a.75.75 0 010 1.5H8.75a.75.75 0 01-.75-.75zm0 5.937a.75.75 0 01.75-.75h11.5a.75.75 0 010 1.5H8.75a.75.75 0 01-.75-.75z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/screen-full-24.svg b/assets/board/octicons/screen-full-24.svg
new file mode 100644
index 0000000..1f4e279
--- /dev/null
+++ b/assets/board/octicons/screen-full-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M4.75 4.5a.25.25 0 00-.25.25v3.5a.75.75 0 01-1.5 0v-3.5C3 3.784 3.784 3 4.75 3h3.5a.75.75 0 010 1.5h-3.5zM15 3.75a.75.75 0 01.75-.75h3.5c.966 0 1.75.784 1.75 1.75v3.5a.75.75 0 01-1.5 0v-3.5a.25.25 0 00-.25-.25h-3.5a.75.75 0 01-.75-.75zM3.75 15a.75.75 0 01.75.75v3.5c0 .138.112.25.25.25h3.5a.75.75 0 010 1.5h-3.5A1.75 1.75 0 013 19.25v-3.5a.75.75 0 01.75-.75zm16.5 0a.75.75 0 01.75.75v3.5A1.75 1.75 0 0119.25 21h-3.5a.75.75 0 010-1.5h3.5a.25.25 0 00.25-.25v-3.5a.75.75 0 01.75-.75z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/screen-normal-24.svg b/assets/board/octicons/screen-normal-24.svg
new file mode 100644
index 0000000..cf3141e
--- /dev/null
+++ b/assets/board/octicons/screen-normal-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M8.25 3a.75.75 0 01.75.75v3.5A1.75 1.75 0 017.25 9h-3.5a.75.75 0 010-1.5h3.5a.25.25 0 00.25-.25v-3.5A.75.75 0 018.25 3zm7.5 0a.75.75 0 01.75.75v3.5c0 .138.112.25.25.25h3.5a.75.75 0 010 1.5h-3.5A1.75 1.75 0 0115 7.25v-3.5a.75.75 0 01.75-.75zM3 15.75a.75.75 0 01.75-.75h3.5c.966 0 1.75.784 1.75 1.75v3.5a.75.75 0 01-1.5 0v-3.5a.25.25 0 00-.25-.25h-3.5a.75.75 0 01-.75-.75zm12 1c0-.966.784-1.75 1.75-1.75h3.5a.75.75 0 010 1.5h-3.5a.25.25 0 00-.25.25v3.5a.75.75 0 01-1.5 0v-3.5z"/></svg> \ No newline at end of file
diff --git a/assets/board/octicons/x-24.svg b/assets/board/octicons/x-24.svg
new file mode 100644
index 0000000..add65b8
--- /dev/null
+++ b/assets/board/octicons/x-24.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill-rule="evenodd" d="M5.72 5.72a.75.75 0 011.06 0L12 10.94l5.22-5.22a.75.75 0 111.06 1.06L13.06 12l5.22 5.22a.75.75 0 11-1.06 1.06L12 13.06l-5.22 5.22a.75.75 0 01-1.06-1.06L10.94 12 5.72 6.78a.75.75 0 010-1.06z"/></svg> \ No newline at end of file
diff --git a/assets/board/ui/collapse.svg b/assets/board/ui/collapse.svg
new file mode 100644
index 0000000..bfb9a8d
--- /dev/null
+++ b/assets/board/ui/collapse.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M359.77,224.004H152.228c-5.928,0-10.732,4.804-10.732,10.73v42.535c0,5.926,4.805,10.734,10.732,10.734
+ H359.77c5.928,0,10.732-4.809,10.732-10.734v-42.535C370.502,228.808,365.697,224.004,359.77,224.004z"/>
+ <path class="st0" d="M256,0C114.613,0,0,114.617,0,256c0,141.387,114.613,256,256,256c141.383,0,256-114.613,256-256
+ C512,114.617,397.383,0,256,0z M256,448c-105.871,0-192-86.129-192-192c0-105.867,86.129-192,192-192c105.867,0,192,86.133,192,192
+ C448,361.871,361.867,448,256,448z"/>
+</g>
+</svg>
diff --git a/assets/board/ui/copy.svg b/assets/board/ui/copy.svg
new file mode 100644
index 0000000..b269373
--- /dev/null
+++ b/assets/board/ui/copy.svg
@@ -0,0 +1,31 @@
+
+ <svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+ <g>
+ <path class="st0 link1" d="M278.172,297.375l-51.203,51.188c0.016,0.594,0.031,1.188,0.031,1.781c0,8.406-1.594,16.781-4.766,24.625
+ c-3.203,7.813-7.922,15.156-14.375,21.563l-33.672,33.719c-6.453,6.438-13.766,11.156-21.609,14.344
+ c-7.859,3.188-16.219,4.781-24.609,4.781c-8.375,0-16.75-1.594-24.594-4.75c-7.844-3.219-15.156-7.938-21.625-14.375
+ c-6.438-6.438-11.156-13.75-14.344-21.594s-4.781-16.219-4.781-24.625c0-8.375,1.594-16.75,4.781-24.594
+ s7.906-15.156,14.344-21.625l33.719-33.688c6.438-6.406,13.734-11.156,21.594-14.344c7.828-3.188,16.219-4.781,24.594-4.781
+ c0.594,0,1.188,0.031,1.766,0.063l51.203-51.234c-1.594-0.734-3.203-1.422-4.844-2.078c-15.422-6.25-31.781-9.375-48.125-9.375
+ s-32.719,3.125-48.125,9.375c-15.422,6.25-29.906,15.688-42.359,28.094l-33.688,33.719c-12.438,12.406-21.859,26.906-28.109,42.344
+ S0,367.688,0,384.031s3.125,32.719,9.375,48.156c6.25,15.406,15.672,29.906,28.109,42.313
+ c12.422,12.469,26.922,21.906,42.344,28.125c15.438,6.281,31.797,9.375,48.141,9.375c16.359,0,32.719-3.094,48.141-9.375
+ c15.422-6.219,29.922-15.656,42.344-28.125l33.703-33.656c12.422-12.469,21.844-26.938,28.109-42.344
+ c6.266-15.469,9.359-31.813,9.375-48.156c-0.016-16.313-3.109-32.688-9.375-48.156
+ C279.594,300.594,278.891,298.969,278.172,297.375z"/>
+ <path class="st0 link2" d="M502.625,79.844c-6.25-15.438-15.672-29.938-28.109-42.359c-12.422-12.422-26.922-21.859-42.359-28.109
+ C416.734,3.125,400.375,0,384.031,0s-32.719,3.125-48.141,9.375s-29.922,15.688-42.344,28.109l-33.703,33.703
+ C247.422,83.594,238,98.094,231.734,113.531c-6.266,15.406-9.359,31.781-9.359,48.141c0,16.344,3.094,32.703,9.359,48.141
+ c0.672,1.625,1.359,3.219,2.094,4.828l51.203-51.203c-0.016-0.578-0.031-1.156-0.031-1.766c0-8.391,1.594-16.781,4.781-24.609
+ c3.188-7.844,7.906-15.156,14.359-21.625l33.672-33.688c6.453-6.406,13.766-11.141,21.625-14.344
+ c7.813-3.156,16.203-4.781,24.594-4.781c8.406,0,16.75,1.625,24.625,4.781c7.813,3.203,15.141,7.938,21.594,14.344
+ c6.438,6.469,11.156,13.781,14.344,21.625c3.156,7.844,4.781,16.219,4.781,24.594c0,8.391-1.625,16.75-4.781,24.625
+ c-3.188,7.844-7.906,15.156-14.344,21.594l-33.688,33.688c-6.438,6.438-13.766,11.156-21.625,14.344
+ c-7.828,3.188-16.203,4.781-24.594,4.781c-0.594,0-1.188-0.016-1.766-0.031l-51.203,51.219c1.594,0.719,3.203,1.422,4.813,2.063
+ c15.453,6.281,31.813,9.406,48.156,9.406s32.719-3.125,48.125-9.406c15.422-6.25,29.906-15.672,42.359-28.094l33.688-33.703
+ c12.438-12.422,21.859-26.922,28.109-42.359c6.25-15.406,9.375-31.781,9.375-48.125S508.875,95.25,502.625,79.844z"/>
+ <path class="st0" d="M160.219,351.781c12.234,12.25,32.063,12.25,44.281,0L351.781,204.5c12.219-12.219,12.25-32.031,0-44.281
+ c-12.234-12.219-32.063-12.219-44.281,0L160.219,307.531C148,319.75,148,339.563,160.219,351.781z"/>
+ </g>
+ </svg>
diff --git a/assets/board/ui/delete.svg b/assets/board/ui/delete.svg
new file mode 100644
index 0000000..39cb5bc
--- /dev/null
+++ b/assets/board/ui/delete.svg
@@ -0,0 +1,21 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M439.114,69.747c0,0,2.977,2.1-43.339-11.966c-41.52-12.604-80.795-15.309-80.795-15.309l-2.722-19.297
+ C310.387,9.857,299.484,0,286.642,0h-30.651h-30.651c-12.825,0-23.729,9.857-25.616,23.175l-2.722,19.297
+ c0,0-39.258,2.705-80.778,15.309C69.891,71.848,72.868,69.747,72.868,69.747c-10.324,2.849-17.536,12.655-17.536,23.864v16.695
+ h200.66h200.677V93.611C456.669,82.402,449.456,72.596,439.114,69.747z" style="fill: rgb(75, 75, 75);"></path>
+ <path class="st0" d="M88.593,464.731C90.957,491.486,113.367,512,140.234,512h231.524c26.857,0,49.276-20.514,51.64-47.269
+ l25.642-327.21H62.952L88.593,464.731z M342.016,209.904c0.51-8.402,7.731-14.807,16.134-14.296
+ c8.402,0.51,14.798,7.731,14.296,16.134l-14.492,239.493c-0.51,8.402-7.731,14.798-16.133,14.288
+ c-8.403-0.51-14.806-7.722-14.296-16.125L342.016,209.904z M240.751,210.823c0-8.42,6.821-15.241,15.24-15.241
+ c8.42,0,15.24,6.821,15.24,15.241v239.492c0,8.42-6.821,15.24-15.24,15.24c-8.42,0-15.24-6.821-15.24-15.24V210.823z
+ M153.833,195.608c8.403-0.51,15.624,5.894,16.134,14.296l14.509,239.492c0.51,8.403-5.894,15.615-14.296,16.125
+ c-8.403,0.51-15.624-5.886-16.134-14.288l-14.509-239.493C139.026,203.339,145.43,196.118,153.833,195.608z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg>
diff --git a/assets/board/ui/down.svg b/assets/board/ui/down.svg
new file mode 100644
index 0000000..ba3d8d7
--- /dev/null
+++ b/assets/board/ui/down.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <polygon class="st0" points="358.402,195.5 358.402,0 153.598,0 153.598,195.5 18.616,195.5 255.991,512 493.384,195.5 "/>
+</g>
+</svg>
diff --git a/assets/board/ui/downvote.svg b/assets/board/ui/downvote.svg
new file mode 100644
index 0000000..2b58da9
--- /dev/null
+++ b/assets/board/ui/downvote.svg
@@ -0,0 +1,11 @@
+ <svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+ <g>
+ <path class="st0" d="M486.892,218.046c-19.899-63.282-46.42-152.51-63.338-175.494c-27.455-37.28-79.181-19.797-118.757-11.88
+c-34.956,7-133.61,55.411-177.16,55.411v199.282c52.847,0,94.803,79.745,145.519,116.387c27.344,19.751,50.234,65.18,59.254,80.514
+c15.186,25.835,60.763-1.51,54.689-39.502c-6.074-37.984-34.938-63.8-39.502-71.384c-4.556-7.622-24.308-28.864-24.308-41.012
+c0-10.649,7.584-17.307,47.086-17.307c49.133,0,82.876,0,92.561,0C502.522,313.061,537.377,266.548,486.892,218.046z"/>
+ <path class="st0" d="M60.781,76.629H38.752C17.344,76.629,0,93.982,0,115.391v173.206c0,21.399,17.344,38.771,38.752,38.771h47.873
+V102.464C86.625,88.184,75.051,76.629,60.781,76.629z"/>
+ </g>
+ </svg>
diff --git a/assets/board/ui/edit.svg b/assets/board/ui/edit.svg
new file mode 100644
index 0000000..c842cc0
--- /dev/null
+++ b/assets/board/ui/edit.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M506.53,88.263L423.737,5.47c-7.294-7.293-19.118-7.293-26.411,0L47.776,341.176
+ c-2.168,2.168-3.769,4.836-4.661,7.768L0.836,487.86c-4.35,14.293,9.011,27.654,23.304,23.305l143.382-43.639h0L506.53,114.675
+ C513.823,107.381,513.823,95.556,506.53,88.263z M63.524,465.077l-16.584-16.584l24.373-80.107l47.004,25.29l25.296,47.012
+ L63.524,465.077z M453.986,75.041L156.172,374.747l-18.919-18.918l299.72-297.828l17.013,17.012
+ C453.986,75.024,453.986,75.03,453.986,75.041z"/>
+</g>
+</svg>
diff --git a/assets/board/ui/left.svg b/assets/board/ui/left.svg
new file mode 100644
index 0000000..9a0daf1
--- /dev/null
+++ b/assets/board/ui/left.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <polygon class="st0" points="316.508,153.598 316.508,18.616 0,256 316.508,493.384 316.508,358.402 512,358.402 512,153.598 "/>
+</g>
+</svg>
diff --git a/assets/board/ui/menu.svg b/assets/board/ui/menu.svg
new file mode 100644
index 0000000..6c23436
--- /dev/null
+++ b/assets/board/ui/menu.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <rect y="16" class="st0" width="512" height="80"/>
+ <rect y="216.008" class="st0" width="512" height="79.984"/>
+ <rect y="416" class="st0" width="512" height="80"/>
+</g>
+</svg>
diff --git a/assets/board/ui/poll.svg b/assets/board/ui/poll.svg
new file mode 100644
index 0000000..a54b8e0
--- /dev/null
+++ b/assets/board/ui/poll.svg
@@ -0,0 +1,15 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<g>
+ <path class="st0" d="M131.474,442.606H512l-45.828-70.447h-51.578l-29.121-211.834l-40.481,5.548
+ c-5.555-4.704-16.389-13.154-35.466-25.048c-17.858-11.208-38.472-17.02-55.07-17.02c-48.364,0-102.796,0-102.796,0l-14.907-8.88
+ l-61.359,91.172l28.165,17.172l36.852,52.382c4.115,5.861,9.67,10.62,16.112,13.736c0,0,24.951,11.79,44.873,21.723
+ c7.19,3.596,15.642,6.768,24.729,9.622l7.08,51.426h-55.971L131.474,442.606z M275.97,334.309
+ c27.694,7.405,50.997-20.767,28.221-39.74c-29.606-24.681-30.548-24.792-30.548-24.792c-9.836-7.98-15.544-19.922-15.641-32.606
+ c-0.055-12.628,5.487-24.632,15.212-32.771l10.529-8.714l83.65-11.527l25.852,187.998l3.851,28.165H258.417l-3.851-28.165
+ l-6.193-45.032C257.725,329.613,267.188,331.934,275.97,334.309z" style="fill: var(--text-color);"></path>
+ <polygon class="st0" points="75.878,69.394 0,183.038 54.252,218.005 130.892,104.375 " style="fill: var(--text-color)"></polygon>
+</g>
+</svg>
diff --git a/assets/board/ui/reply.svg b/assets/board/ui/reply.svg
new file mode 100644
index 0000000..59eb129
--- /dev/null
+++ b/assets/board/ui/reply.svg
@@ -0,0 +1,12 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M292.497,168.968c-21.134,0-40.287,0-57.542,0V65.394L0,255.995l234.955,190.61V334.395
+ c7.132,0,14.331,0,21.578,0c95.305,0,227.772-2.396,237.359,100.701C541.847,322.408,501.086,168.968,292.497,168.968z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg>
diff --git a/assets/board/ui/right.svg b/assets/board/ui/right.svg
new file mode 100644
index 0000000..9df4fc3
--- /dev/null
+++ b/assets/board/ui/right.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M501.66,235.774L228.764,38.771c-7.692-4.975-17.622-4.78-25.11,0.496
+ c-7.478,5.277-11.022,14.546-8.928,23.465l22.53,96.466H32.441C14.537,159.189,0.01,173.715,0.01,191.63L0,320.372
+ c0.01,17.925,14.537,32.442,32.441,32.442h184.823l-22.549,96.457c-2.084,8.908,1.45,18.197,8.938,23.464
+ c7.488,5.267,17.418,5.472,25.11,0.507L501.66,276.228c6.494-4.693,10.34-12.219,10.34-20.232S508.155,240.457,501.66,235.774z"/>
+</g>
+</svg>
diff --git a/assets/board/ui/search.svg b/assets/board/ui/search.svg
new file mode 100644
index 0000000..588208c
--- /dev/null
+++ b/assets/board/ui/search.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M495.272,423.558c0,0-68.542-59.952-84.937-76.328c-24.063-23.938-33.69-35.466-25.195-54.931
+ c37.155-75.78,24.303-169.854-38.72-232.858c-79.235-79.254-207.739-79.254-286.984,0c-79.245,79.264-79.245,207.729,0,287.003
+ c62.985,62.985,157.088,75.837,232.839,38.691c19.466-8.485,31.022,1.142,54.951,25.215c16.384,16.385,76.308,84.937,76.308,84.937
+ c31.089,31.071,55.009,11.95,69.368-2.39C507.232,478.547,526.362,454.638,495.272,423.558z M286.017,286.012
+ c-45.9,45.871-120.288,45.871-166.169,0c-45.88-45.871-45.88-120.278,0-166.149c45.881-45.871,120.269-45.871,166.169,0
+ C331.898,165.734,331.898,240.141,286.017,286.012z"/>
+</g>
+</svg>
diff --git a/assets/board/ui/sort.svg b/assets/board/ui/sort.svg
new file mode 100644
index 0000000..3a56244
--- /dev/null
+++ b/assets/board/ui/sort.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 125" version="1.1" x="0px" y="0px"><title>Levers 6.5</title><desc>Created with Sketch.</desc><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g fill-rule="nonzero" fill="#000000"><path d="M72,47.5 L72,27.5 L67,27.5 L67,47.5 L62,47.5 L62,62.5 L67,62.5 L67,72.5 L72,72.5 L72,62.5 L77,62.5 L77,47.5 L72,47.5 Z M52.5,32.5 L52.5,27.5 L47.5,27.5 L47.5,32.5 L42.5,32.5 L42.5,47.5 L47.5,47.5 L47.5,72.5 L52.5,72.5 L52.5,47.5 L57.5,47.5 L57.5,32.5 L52.5,32.5 L52.5,32.5 Z M33,54.5 L33,27.5 L28,27.5 L28,54.5 L23,54.5 L23,69.5 L28,69.5 L28,72.5 L33,72.5 L33,69.5 L38,69.5 L38,54.5 L33,54.5 Z" transform="translate(50.000000, 50.000000) rotate(90.000000) translate(-50.000000, -50.000000) "/></g></g></svg>
diff --git a/assets/board/ui/tianming.svg b/assets/board/ui/tianming.svg
new file mode 100644
index 0000000..3120a56
--- /dev/null
+++ b/assets/board/ui/tianming.svg
@@ -0,0 +1,76 @@
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 996.000000 560.000000" preserveAspectRatio="xMidYMid meet">
+ <g transform="translate(0.000000,560.000000) scale(0.100000,-0.100000)" fill="#F6F6F6" stroke="none">
+ <path d="M7775 5423 c-70 -19 -226 -179 -408 -419 -46 -60 -121 -158 -167
+-219 -46 -60 -145 -191 -220 -290 -75 -99 -179 -235 -231 -303 -52 -68 -101
+-134 -109 -146 -12 -19 -201 -295 -260 -381 -122 -177 -132 -195 -144 -255
+-16 -74 -5 -124 31 -147 31 -21 103 -11 159 22 44 26 143 130 166 174 7 14 25
+45 40 68 15 23 28 46 28 51 0 5 7 16 16 23 9 7 20 22 24 34 4 11 29 49 56 85
+70 95 161 216 214 285 26 33 69 89 96 125 l49 65 6 -60 c7 -70 18 -95 56 -121
+25 -17 45 -19 213 -16 102 1 229 7 284 12 54 6 245 10 426 10 209 0 339 4 361
+11 19 6 49 27 67 47 28 31 32 42 32 94 0 32 4 58 8 58 14 0 60 -61 192 -255 8
+-12 102 -152 209 -310 210 -313 270 -385 321 -385 67 0 130 85 130 174 0 51
+-12 82 -52 143 -15 23 -28 46 -28 51 0 5 -9 17 -20 27 -11 10 -20 23 -20 30 0
+7 -9 20 -20 30 -11 10 -20 23 -20 30 0 7 -9 20 -20 30 -11 10 -20 23 -20 30 0
+7 -9 20 -20 30 -11 10 -20 22 -20 27 0 14 -213 326 -290 423 -84 107 -198 255
+-258 333 -24 31 -55 71 -70 87 -39 45 -185 208 -202 225 -8 8 -35 38 -60 65
+-250 280 -325 354 -385 384 -43 21 -108 32 -140 24z m142 -415 c68 -70 451
+-520 612 -721 16 -20 8 -35 -11 -19 -19 14 -140 48 -229 62 -80 13 -248 9
+-404 -10 -44 -5 -181 -14 -305 -19 -247 -11 -334 -21 -382 -45 -43 -22 -47
+-13 -11 32 16 20 50 64 75 97 26 33 75 97 110 142 93 120 251 325 340 441 85
+110 103 132 108 132 3 0 46 -42 97 -92z"></path>
+ <path d="M1590 5210 c-275 -12 -356 -47 -399 -173 -11 -34 -10 -42 9 -81 37
+-77 43 -78 273 -73 111 3 261 10 332 16 72 6 193 15 270 20 77 6 168 13 201
+17 l61 7 7 -89 c19 -281 19 -354 2 -373 -17 -18 -49 -35 -243 -128 -163 -77
+-288 -175 -413 -323 -30 -36 -57 -67 -60 -70 -17 -17 -76 -99 -136 -190 -91
+-137 -174 -306 -219 -445 -46 -146 -75 -261 -97 -395 -5 -30 -12 -146 -15
+-257 -6 -233 8 -323 58 -393 26 -36 33 -40 72 -40 90 1 130 70 157 270 6 47
+15 112 20 145 5 33 14 96 20 140 31 226 80 423 137 545 82 177 147 302 202
+385 14 22 31 48 36 56 91 146 219 268 325 309 19 7 40 16 45 20 6 3 29 12 52
+20 80 25 75 65 69 -522 -5 -566 -16 -768 -51 -923 -29 -133 -55 -214 -102
+-325 -9 -19 -22 -51 -30 -70 -31 -72 -132 -268 -191 -373 -12 -20 -31 -53 -42
+-72 -11 -19 -29 -51 -40 -70 -11 -19 -30 -52 -41 -72 -12 -21 -29 -49 -38 -63
+-9 -14 -23 -37 -30 -51 -12 -25 -85 -120 -161 -209 -120 -142 -352 -440 -371
+-477 -21 -41 -22 -48 -10 -91 20 -77 41 -92 130 -92 88 0 115 13 190 88 51 52
+151 175 221 272 61 86 173 225 224 280 74 80 86 99 281 475 148 283 192 372
+203 402 12 36 29 43 38 16 3 -10 19 -53 35 -96 37 -99 85 -227 112 -297 43
+-114 142 -323 197 -415 17 -27 34 -59 39 -70 5 -12 16 -27 25 -34 9 -7 16 -19
+16 -25 0 -15 178 -255 237 -321 10 -11 47 -54 83 -95 36 -41 110 -122 165
+-179 l101 -103 83 -2 c81 -1 83 0 107 29 30 38 31 81 3 166 -23 69 -57 114
+-182 244 -130 133 -273 321 -357 470 -11 19 -30 52 -42 72 -66 116 -258 491
+-258 505 0 5 -9 27 -19 51 -48 105 -147 442 -186 632 -3 17 -10 109 -16 205
+-5 96 -14 227 -20 290 -5 63 -12 290 -15 504 l-5 389 35 -7 c40 -8 123 -49
+191 -96 98 -67 226 -220 317 -377 40 -69 118 -228 118 -241 0 -7 4 -20 10 -30
+10 -18 39 -106 60 -182 7 -25 16 -56 21 -70 4 -14 17 -68 29 -120 11 -52 25
+-114 30 -138 6 -23 10 -60 10 -83 0 -22 4 -70 9 -107 5 -37 15 -116 21 -177
+18 -179 32 -254 52 -272 10 -9 40 -18 66 -21 92 -8 148 39 178 151 16 61 18
+243 4 331 -6 33 -19 120 -30 191 -24 153 -62 316 -90 390 -5 11 -18 47 -30 80
+-46 125 -187 411 -240 485 -11 15 -20 31 -20 35 0 19 -168 244 -225 300 -137
+137 -261 206 -460 258 l-50 13 3 139 c2 77 7 176 10 220 l7 80 245 -3 c135 -2
+311 -7 393 -12 197 -12 329 1 375 37 36 27 62 76 62 118 0 17 -15 40 -43 68
+-47 48 -84 59 -242 77 -103 11 -1590 11 -1865 0z"></path>
+ <path d="M7924 3925 c-57 -25 -84 -82 -84 -182 0 -83 30 -159 87 -223 46 -51
+57 -58 142 -90 42 -15 45 -18 57 -70 26 -117 35 -261 21 -334 -14 -77 -21 -83
+-120 -121 -71 -27 -121 -67 -165 -132 -56 -83 -74 -141 -80 -264 -6 -147 24
+-238 104 -308 54 -47 91 -65 209 -100 39 -12 88 -27 109 -33 22 -7 65 -36 96
+-64 61 -57 87 -114 110 -244 6 -36 15 -85 20 -110 5 -25 14 -79 20 -120 6 -41
+15 -99 21 -129 5 -30 9 -225 9 -435 0 -427 5 -475 56 -534 28 -33 37 -37 80
+-37 62 0 118 26 132 62 11 29 13 55 33 373 12 199 6 580 -12 690 -28 177 -89
+415 -137 535 -66 166 -108 201 -367 300 -38 15 -84 33 -100 40 -17 8 -43 18
+-58 24 -43 16 -54 52 -36 118 12 49 19 58 57 79 28 16 59 24 89 24 25 0 84 4
+132 10 47 5 133 14 191 20 149 16 258 56 327 123 35 32 81 122 102 197 8 25
+17 58 22 74 12 37 11 86 0 139 -5 23 -15 69 -21 102 -17 83 -63 175 -113 224
+-102 100 -245 186 -327 196 -25 3 -117 1 -205 -3 -88 -4 -166 -6 -172 -4 -8 2
+-13 21 -13 42 0 44 -21 99 -47 121 -23 20 -108 59 -125 58 -7 0 -27 -7 -44
+-14z m658 -525 c87 -25 118 -82 118 -215 0 -101 -14 -140 -58 -161 -35 -17
+-189 -63 -209 -64 -10 0 -13 53 -13 231 l0 232 63 -6 c34 -4 79 -11 99 -17z"></path>
+ <path d="M7523 3860 c-58 -35 -66 -66 -59 -220 3 -74 9 -167 12 -207 6 -70 6
+-72 -17 -77 -13 -3 -109 -7 -214 -8 l-190 -3 4 186 c4 208 -2 233 -62 269 -80
+49 -174 -5 -201 -115 -4 -16 -11 -95 -16 -175 -4 -80 -13 -221 -20 -315 -12
+-172 -6 -468 10 -535 4 -19 14 -60 20 -90 33 -156 63 -209 143 -259 71 -44
+132 -55 297 -55 137 -1 164 2 230 24 64 20 84 33 135 84 104 104 146 227 176
+518 13 126 11 184 -26 743 -13 198 -44 255 -138 255 -34 0 -63 -7 -84 -20z
+m-55 -845 c19 -7 17 -326 -3 -365 -19 -36 -57 -63 -120 -85 -78 -26 -136 -30
+-173 -11 -52 27 -64 53 -102 231 -7 33 -22 76 -32 95 -21 35 -20 68 1 123 l11
+28 203 -6 c111 -4 208 -8 215 -10z"></path>
+ </g>
+</svg>
diff --git a/assets/board/ui/uncollapse.svg b/assets/board/ui/uncollapse.svg
new file mode 100644
index 0000000..6b0d362
--- /dev/null
+++ b/assets/board/ui/uncollapse.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M359.244,224.004h-59.988c-6.217,0-11.258-5.043-11.258-11.258v-59.992c0-6.215-5.039-11.254-11.256-11.254
+ h-41.486c-6.217,0-11.258,5.039-11.258,11.254v59.992c0,6.215-5.039,11.258-11.256,11.258h-59.988
+ c-6.219,0-11.258,5.039-11.258,11.258v41.484c0,6.215,5.039,11.258,11.258,11.258h59.988c6.217,0,11.256,5.039,11.256,11.258
+ v59.984c0,6.219,5.041,11.258,11.258,11.258h41.486c6.217,0,11.256-5.039,11.256-11.258v-59.984
+ c0-6.219,5.041-11.258,11.258-11.258h59.988c6.217,0,11.258-5.043,11.258-11.258v-41.484
+ C370.502,229.043,365.461,224.004,359.244,224.004z"/>
+ <path class="st0" d="M256,0C114.613,0,0,114.617,0,256c0,141.387,114.613,256,256,256c141.383,0,256-114.613,256-256
+ C512,114.617,397.383,0,256,0z M256,448c-105.871,0-192-86.129-192-192c0-105.867,86.129-192,192-192c105.867,0,192,86.133,192,192
+ C448,361.871,361.867,448,256,448z"/>
+</g>
+</svg>
diff --git a/assets/board/ui/upvote.svg b/assets/board/ui/upvote.svg
new file mode 100644
index 0000000..3f29b99
--- /dev/null
+++ b/assets/board/ui/upvote.svg
@@ -0,0 +1,13 @@
+
+ <svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+ <g>
+ <path class="st0" d="M462.938,198.933c-9.688,0-43.437,0-92.562,0c-39.5,0-47.094-6.656-47.094-17.297
+c0-12.156,19.75-33.406,24.313-41.016c4.563-7.594,33.422-33.406,39.5-71.391s-39.5-65.328-54.688-39.5
+c-9.016,15.328-31.906,60.766-59.25,80.516c-50.719,36.641-92.672,116.391-145.516,116.391v199.281
+c43.547,0,142.203,48.406,177.156,55.406c39.578,7.922,91.297,25.406,118.75-11.875c16.921-22.984,43.437-112.219,63.343-175.5
+C537.376,245.448,502.517,198.933,462.938,198.933z"/>
+ <path class="st0" d="M0.001,265.401v173.203c0,21.406,17.344,38.766,38.75,38.766h22.031c14.266,0,25.844-11.563,25.844-25.844
+V226.636H38.751C17.345,226.636,0.001,243.995,0.001,265.401z"/>
+ </g>
+ </svg>
diff --git a/assets/fonts/CrimsonText-Bold.ttf b/assets/fonts/CrimsonText-Bold.ttf
new file mode 100644
index 0000000..5753863
--- /dev/null
+++ b/assets/fonts/CrimsonText-Bold.ttf
Binary files differ
diff --git a/assets/fonts/CrimsonText-BoldItalic.ttf b/assets/fonts/CrimsonText-BoldItalic.ttf
new file mode 100644
index 0000000..233e387
--- /dev/null
+++ b/assets/fonts/CrimsonText-BoldItalic.ttf
Binary files differ
diff --git a/assets/fonts/CrimsonText-Italic.ttf b/assets/fonts/CrimsonText-Italic.ttf
new file mode 100644
index 0000000..e8fe8b8
--- /dev/null
+++ b/assets/fonts/CrimsonText-Italic.ttf
Binary files differ
diff --git a/assets/fonts/CrimsonText-Regular.ttf b/assets/fonts/CrimsonText-Regular.ttf
new file mode 100644
index 0000000..f24bf2a
--- /dev/null
+++ b/assets/fonts/CrimsonText-Regular.ttf
Binary files differ
diff --git a/assets/fonts/CrimsonText-SemiBold.ttf b/assets/fonts/CrimsonText-SemiBold.ttf
new file mode 100644
index 0000000..96f27e8
--- /dev/null
+++ b/assets/fonts/CrimsonText-SemiBold.ttf
Binary files differ
diff --git a/assets/fonts/CrimsonText-SemiBoldItalic.ttf b/assets/fonts/CrimsonText-SemiBoldItalic.ttf
new file mode 100644
index 0000000..66b129b
--- /dev/null
+++ b/assets/fonts/CrimsonText-SemiBoldItalic.ttf
Binary files differ
diff --git a/assets/fonts/Crimson_Text/Crimson_Text,Inter.zip b/assets/fonts/Crimson_Text/Crimson_Text,Inter.zip
new file mode 100644
index 0000000..e421034
--- /dev/null
+++ b/assets/fonts/Crimson_Text/Crimson_Text,Inter.zip
Binary files differ
diff --git a/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Bold.ttf b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Bold.ttf
new file mode 100644
index 0000000..5753863
--- /dev/null
+++ b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Bold.ttf
Binary files differ
diff --git a/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-BoldItalic.ttf b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-BoldItalic.ttf
new file mode 100644
index 0000000..233e387
--- /dev/null
+++ b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-BoldItalic.ttf
Binary files differ
diff --git a/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Italic.ttf b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Italic.ttf
new file mode 100644
index 0000000..e8fe8b8
--- /dev/null
+++ b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Italic.ttf
Binary files differ
diff --git a/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Regular.ttf b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Regular.ttf
new file mode 100644
index 0000000..f24bf2a
--- /dev/null
+++ b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-Regular.ttf
Binary files differ
diff --git a/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-SemiBold.ttf b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-SemiBold.ttf
new file mode 100644
index 0000000..96f27e8
--- /dev/null
+++ b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-SemiBold.ttf
Binary files differ
diff --git a/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-SemiBoldItalic.ttf b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-SemiBoldItalic.ttf
new file mode 100644
index 0000000..66b129b
--- /dev/null
+++ b/assets/fonts/Crimson_Text/Crimson_Text/CrimsonText-SemiBoldItalic.ttf
Binary files differ
diff --git a/assets/fonts/Crimson_Text/Crimson_Text/OFL.txt b/assets/fonts/Crimson_Text/Crimson_Text/OFL.txt
new file mode 100644
index 0000000..114c104
--- /dev/null
+++ b/assets/fonts/Crimson_Text/Crimson_Text/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2010 The Crimson Text Project Authors (https://github.com/googlefonts/Crimson)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/fonts/In/Inter/Inter/Inter-VariableFont_slnt,wght.ttf b/assets/fonts/In/Inter/Inter/Inter-VariableFont_slnt,wght.ttf
new file mode 100644
index 0000000..e724708
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/Inter-VariableFont_slnt,wght.ttf
Binary files differ
diff --git a/assets/fonts/In/Inter/Inter/OFL.txt b/assets/fonts/In/Inter/Inter/OFL.txt
new file mode 100644
index 0000000..d05ec4b
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/fonts/In/Inter/Inter/README.txt b/assets/fonts/In/Inter/Inter/README.txt
new file mode 100644
index 0000000..9a81522
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/README.txt
@@ -0,0 +1,72 @@
+Inter Variable Font
+===================
+
+This download contains Inter as both a variable font and static fonts.
+
+Inter is a variable font with these axes:
+ slnt
+ wght
+
+This means all the styles are contained in a single file:
+ Inter/Inter-VariableFont_slnt,wght.ttf
+
+If your app fully supports variable fonts, you can now pick intermediate styles
+that aren’t available as static fonts. Not all apps support variable fonts, and
+in those cases you can use the static font files for Inter:
+ Inter/static/Inter-Thin.ttf
+ Inter/static/Inter-ExtraLight.ttf
+ Inter/static/Inter-Light.ttf
+ Inter/static/Inter-Regular.ttf
+ Inter/static/Inter-Medium.ttf
+ Inter/static/Inter-SemiBold.ttf
+ Inter/static/Inter-Bold.ttf
+ Inter/static/Inter-ExtraBold.ttf
+ Inter/static/Inter-Black.ttf
+
+Get started
+-----------
+
+1. Install the font files you want to use
+
+2. Use your app's font picker to view the font family and all the
+available styles
+
+Learn more about variable fonts
+-------------------------------
+
+ https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
+ https://variablefonts.typenetwork.com
+ https://medium.com/variable-fonts
+
+In desktop apps
+
+ https://theblog.adobe.com/can-variable-fonts-illustrator-cc
+ https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
+
+Online
+
+ https://developers.google.com/fonts/docs/getting_started
+ https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
+ https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
+
+Installing fonts
+
+ MacOS: https://support.apple.com/en-us/HT201749
+ Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
+ Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
+
+Android Apps
+
+ https://developers.google.com/fonts/docs/android
+ https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
+
+License
+-------
+Please read the full license text (OFL.txt) to understand the permissions,
+restrictions and requirements for usage, redistribution, and modification.
+
+You can use them in your products & projects – print or digital,
+commercial or otherwise.
+
+This isn't legal advice, please consider consulting a lawyer and see the full
+license for all details.
diff --git a/assets/fonts/In/Inter/Inter/static/Inter-Black.ttf b/assets/fonts/In/Inter/Inter/static/Inter-Black.ttf
new file mode 100644
index 0000000..b27822b
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/static/Inter-Black.ttf
Binary files differ
diff --git a/assets/fonts/In/Inter/Inter/static/Inter-Bold.ttf b/assets/fonts/In/Inter/Inter/static/Inter-Bold.ttf
new file mode 100644
index 0000000..fe23eeb
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/static/Inter-Bold.ttf
Binary files differ
diff --git a/assets/fonts/In/Inter/Inter/static/Inter-ExtraBold.ttf b/assets/fonts/In/Inter/Inter/static/Inter-ExtraBold.ttf
new file mode 100644
index 0000000..874b1b0
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/static/Inter-ExtraBold.ttf
Binary files differ
diff --git a/assets/fonts/In/Inter/Inter/static/Inter-ExtraLight.ttf b/assets/fonts/In/Inter/Inter/static/Inter-ExtraLight.ttf
new file mode 100644
index 0000000..c993e82
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/static/Inter-ExtraLight.ttf
Binary files differ
diff --git a/assets/fonts/In/Inter/Inter/static/Inter-Light.ttf b/assets/fonts/In/Inter/Inter/static/Inter-Light.ttf
new file mode 100644
index 0000000..71188f5
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/static/Inter-Light.ttf
Binary files differ
diff --git a/assets/fonts/In/Inter/Inter/static/Inter-Medium.ttf b/assets/fonts/In/Inter/Inter/static/Inter-Medium.ttf
new file mode 100644
index 0000000..a01f377
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/static/Inter-Medium.ttf
Binary files differ
diff --git a/assets/fonts/In/Inter/Inter/static/Inter-Regular.ttf b/assets/fonts/In/Inter/Inter/static/Inter-Regular.ttf
new file mode 100644
index 0000000..5e4851f
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/static/Inter-Regular.ttf
Binary files differ
diff --git a/assets/fonts/In/Inter/Inter/static/Inter-SemiBold.ttf b/assets/fonts/In/Inter/Inter/static/Inter-SemiBold.ttf
new file mode 100644
index 0000000..ecc7041
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/static/Inter-SemiBold.ttf
Binary files differ
diff --git a/assets/fonts/In/Inter/Inter/static/Inter-Thin.ttf b/assets/fonts/In/Inter/Inter/static/Inter-Thin.ttf
new file mode 100644
index 0000000..fe77243
--- /dev/null
+++ b/assets/fonts/In/Inter/Inter/static/Inter-Thin.ttf
Binary files differ
diff --git a/assets/fonts/Inter-Black.ttf b/assets/fonts/Inter-Black.ttf
new file mode 100644
index 0000000..b27822b
--- /dev/null
+++ b/assets/fonts/Inter-Black.ttf
Binary files differ
diff --git a/assets/fonts/Inter-Bold.ttf b/assets/fonts/Inter-Bold.ttf
new file mode 100644
index 0000000..fe23eeb
--- /dev/null
+++ b/assets/fonts/Inter-Bold.ttf
Binary files differ
diff --git a/assets/fonts/Inter-ExtraBold.ttf b/assets/fonts/Inter-ExtraBold.ttf
new file mode 100644
index 0000000..874b1b0
--- /dev/null
+++ b/assets/fonts/Inter-ExtraBold.ttf
Binary files differ
diff --git a/assets/fonts/Inter-ExtraLight.ttf b/assets/fonts/Inter-ExtraLight.ttf
new file mode 100644
index 0000000..c993e82
--- /dev/null
+++ b/assets/fonts/Inter-ExtraLight.ttf
Binary files differ
diff --git a/assets/fonts/Inter-Light.ttf b/assets/fonts/Inter-Light.ttf
new file mode 100644
index 0000000..71188f5
--- /dev/null
+++ b/assets/fonts/Inter-Light.ttf
Binary files differ
diff --git a/assets/fonts/Inter-Medium.ttf b/assets/fonts/Inter-Medium.ttf
new file mode 100644
index 0000000..a01f377
--- /dev/null
+++ b/assets/fonts/Inter-Medium.ttf
Binary files differ
diff --git a/assets/fonts/Inter-Regular.ttf b/assets/fonts/Inter-Regular.ttf
new file mode 100644
index 0000000..5e4851f
--- /dev/null
+++ b/assets/fonts/Inter-Regular.ttf
Binary files differ
diff --git a/assets/fonts/Inter-SemiBold.ttf b/assets/fonts/Inter-SemiBold.ttf
new file mode 100644
index 0000000..ecc7041
--- /dev/null
+++ b/assets/fonts/Inter-SemiBold.ttf
Binary files differ
diff --git a/assets/fonts/Inter-Thin.ttf b/assets/fonts/Inter-Thin.ttf
new file mode 100644
index 0000000..fe77243
--- /dev/null
+++ b/assets/fonts/Inter-Thin.ttf
Binary files differ
diff --git a/assets/fonts/Inter-VariableFont.ttf b/assets/fonts/Inter-VariableFont.ttf
new file mode 100644
index 0000000..e724708
--- /dev/null
+++ b/assets/fonts/Inter-VariableFont.ttf
Binary files differ
diff --git a/assets/fonts/Inter-VariableFont_slnt,wght.ttf b/assets/fonts/Inter-VariableFont_slnt,wght.ttf
new file mode 100644
index 0000000..e724708
--- /dev/null
+++ b/assets/fonts/Inter-VariableFont_slnt,wght.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/Inter-VariableFont_slnt,wght.ttf b/assets/fonts/Inter/Inter/Inter-VariableFont_slnt,wght.ttf
new file mode 100644
index 0000000..e724708
--- /dev/null
+++ b/assets/fonts/Inter/Inter/Inter-VariableFont_slnt,wght.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/OFL.txt b/assets/fonts/Inter/Inter/OFL.txt
new file mode 100644
index 0000000..d05ec4b
--- /dev/null
+++ b/assets/fonts/Inter/Inter/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/fonts/Inter/Inter/README.txt b/assets/fonts/Inter/Inter/README.txt
new file mode 100644
index 0000000..9a81522
--- /dev/null
+++ b/assets/fonts/Inter/Inter/README.txt
@@ -0,0 +1,72 @@
+Inter Variable Font
+===================
+
+This download contains Inter as both a variable font and static fonts.
+
+Inter is a variable font with these axes:
+ slnt
+ wght
+
+This means all the styles are contained in a single file:
+ Inter/Inter-VariableFont_slnt,wght.ttf
+
+If your app fully supports variable fonts, you can now pick intermediate styles
+that aren’t available as static fonts. Not all apps support variable fonts, and
+in those cases you can use the static font files for Inter:
+ Inter/static/Inter-Thin.ttf
+ Inter/static/Inter-ExtraLight.ttf
+ Inter/static/Inter-Light.ttf
+ Inter/static/Inter-Regular.ttf
+ Inter/static/Inter-Medium.ttf
+ Inter/static/Inter-SemiBold.ttf
+ Inter/static/Inter-Bold.ttf
+ Inter/static/Inter-ExtraBold.ttf
+ Inter/static/Inter-Black.ttf
+
+Get started
+-----------
+
+1. Install the font files you want to use
+
+2. Use your app's font picker to view the font family and all the
+available styles
+
+Learn more about variable fonts
+-------------------------------
+
+ https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
+ https://variablefonts.typenetwork.com
+ https://medium.com/variable-fonts
+
+In desktop apps
+
+ https://theblog.adobe.com/can-variable-fonts-illustrator-cc
+ https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
+
+Online
+
+ https://developers.google.com/fonts/docs/getting_started
+ https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
+ https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
+
+Installing fonts
+
+ MacOS: https://support.apple.com/en-us/HT201749
+ Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
+ Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
+
+Android Apps
+
+ https://developers.google.com/fonts/docs/android
+ https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
+
+License
+-------
+Please read the full license text (OFL.txt) to understand the permissions,
+restrictions and requirements for usage, redistribution, and modification.
+
+You can use them in your products & projects – print or digital,
+commercial or otherwise.
+
+This isn't legal advice, please consider consulting a lawyer and see the full
+license for all details.
diff --git a/assets/fonts/Inter/Inter/static/Inter-Black.ttf b/assets/fonts/Inter/Inter/static/Inter-Black.ttf
new file mode 100644
index 0000000..b27822b
--- /dev/null
+++ b/assets/fonts/Inter/Inter/static/Inter-Black.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/static/Inter-Bold.ttf b/assets/fonts/Inter/Inter/static/Inter-Bold.ttf
new file mode 100644
index 0000000..fe23eeb
--- /dev/null
+++ b/assets/fonts/Inter/Inter/static/Inter-Bold.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/static/Inter-ExtraBold.ttf b/assets/fonts/Inter/Inter/static/Inter-ExtraBold.ttf
new file mode 100644
index 0000000..874b1b0
--- /dev/null
+++ b/assets/fonts/Inter/Inter/static/Inter-ExtraBold.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/static/Inter-ExtraLight.ttf b/assets/fonts/Inter/Inter/static/Inter-ExtraLight.ttf
new file mode 100644
index 0000000..c993e82
--- /dev/null
+++ b/assets/fonts/Inter/Inter/static/Inter-ExtraLight.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/static/Inter-Light.ttf b/assets/fonts/Inter/Inter/static/Inter-Light.ttf
new file mode 100644
index 0000000..71188f5
--- /dev/null
+++ b/assets/fonts/Inter/Inter/static/Inter-Light.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/static/Inter-Medium.ttf b/assets/fonts/Inter/Inter/static/Inter-Medium.ttf
new file mode 100644
index 0000000..a01f377
--- /dev/null
+++ b/assets/fonts/Inter/Inter/static/Inter-Medium.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/static/Inter-Regular.ttf b/assets/fonts/Inter/Inter/static/Inter-Regular.ttf
new file mode 100644
index 0000000..5e4851f
--- /dev/null
+++ b/assets/fonts/Inter/Inter/static/Inter-Regular.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/static/Inter-SemiBold.ttf b/assets/fonts/Inter/Inter/static/Inter-SemiBold.ttf
new file mode 100644
index 0000000..ecc7041
--- /dev/null
+++ b/assets/fonts/Inter/Inter/static/Inter-SemiBold.ttf
Binary files differ
diff --git a/assets/fonts/Inter/Inter/static/Inter-Thin.ttf b/assets/fonts/Inter/Inter/static/Inter-Thin.ttf
new file mode 100644
index 0000000..fe77243
--- /dev/null
+++ b/assets/fonts/Inter/Inter/static/Inter-Thin.ttf
Binary files differ
diff --git a/assets/icons/favicon.ico b/assets/icons/favicon.ico
new file mode 100644
index 0000000..7bb609b
--- /dev/null
+++ b/assets/icons/favicon.ico
Binary files differ
diff --git a/assets/icons/search.svg b/assets/icons/search.svg
new file mode 100644
index 0000000..5d48d1b
--- /dev/null
+++ b/assets/icons/search.svg
@@ -0,0 +1,13 @@
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4B4B4B;}
+</style>
+<g>
+ <path class="st0" d="M495.272,423.558c0,0-68.542-59.952-84.937-76.328c-24.063-23.938-33.69-35.466-25.195-54.931
+ c37.155-75.78,24.303-169.854-38.72-232.858c-79.235-79.254-207.739-79.254-286.984,0c-79.245,79.264-79.245,207.729,0,287.003
+ c62.985,62.985,157.088,75.837,232.839,38.691c19.466-8.485,31.022,1.142,54.951,25.215c16.384,16.385,76.308,84.937,76.308,84.937
+ c31.089,31.071,55.009,11.95,69.368-2.39C507.232,478.547,526.362,454.638,495.272,423.558z M286.017,286.012
+ c-45.9,45.871-120.288,45.871-166.169,0c-45.88-45.871-45.88-120.278,0-166.149c45.881-45.871,120.269-45.871,166.169,0
+ C331.898,165.734,331.898,240.141,286.017,286.012z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg> \ No newline at end of file
diff --git a/assets/icons/tianming.svg b/assets/icons/tianming.svg
new file mode 100644
index 0000000..3120a56
--- /dev/null
+++ b/assets/icons/tianming.svg
@@ -0,0 +1,76 @@
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 996.000000 560.000000" preserveAspectRatio="xMidYMid meet">
+ <g transform="translate(0.000000,560.000000) scale(0.100000,-0.100000)" fill="#F6F6F6" stroke="none">
+ <path d="M7775 5423 c-70 -19 -226 -179 -408 -419 -46 -60 -121 -158 -167
+-219 -46 -60 -145 -191 -220 -290 -75 -99 -179 -235 -231 -303 -52 -68 -101
+-134 -109 -146 -12 -19 -201 -295 -260 -381 -122 -177 -132 -195 -144 -255
+-16 -74 -5 -124 31 -147 31 -21 103 -11 159 22 44 26 143 130 166 174 7 14 25
+45 40 68 15 23 28 46 28 51 0 5 7 16 16 23 9 7 20 22 24 34 4 11 29 49 56 85
+70 95 161 216 214 285 26 33 69 89 96 125 l49 65 6 -60 c7 -70 18 -95 56 -121
+25 -17 45 -19 213 -16 102 1 229 7 284 12 54 6 245 10 426 10 209 0 339 4 361
+11 19 6 49 27 67 47 28 31 32 42 32 94 0 32 4 58 8 58 14 0 60 -61 192 -255 8
+-12 102 -152 209 -310 210 -313 270 -385 321 -385 67 0 130 85 130 174 0 51
+-12 82 -52 143 -15 23 -28 46 -28 51 0 5 -9 17 -20 27 -11 10 -20 23 -20 30 0
+7 -9 20 -20 30 -11 10 -20 23 -20 30 0 7 -9 20 -20 30 -11 10 -20 23 -20 30 0
+7 -9 20 -20 30 -11 10 -20 22 -20 27 0 14 -213 326 -290 423 -84 107 -198 255
+-258 333 -24 31 -55 71 -70 87 -39 45 -185 208 -202 225 -8 8 -35 38 -60 65
+-250 280 -325 354 -385 384 -43 21 -108 32 -140 24z m142 -415 c68 -70 451
+-520 612 -721 16 -20 8 -35 -11 -19 -19 14 -140 48 -229 62 -80 13 -248 9
+-404 -10 -44 -5 -181 -14 -305 -19 -247 -11 -334 -21 -382 -45 -43 -22 -47
+-13 -11 32 16 20 50 64 75 97 26 33 75 97 110 142 93 120 251 325 340 441 85
+110 103 132 108 132 3 0 46 -42 97 -92z"></path>
+ <path d="M1590 5210 c-275 -12 -356 -47 -399 -173 -11 -34 -10 -42 9 -81 37
+-77 43 -78 273 -73 111 3 261 10 332 16 72 6 193 15 270 20 77 6 168 13 201
+17 l61 7 7 -89 c19 -281 19 -354 2 -373 -17 -18 -49 -35 -243 -128 -163 -77
+-288 -175 -413 -323 -30 -36 -57 -67 -60 -70 -17 -17 -76 -99 -136 -190 -91
+-137 -174 -306 -219 -445 -46 -146 -75 -261 -97 -395 -5 -30 -12 -146 -15
+-257 -6 -233 8 -323 58 -393 26 -36 33 -40 72 -40 90 1 130 70 157 270 6 47
+15 112 20 145 5 33 14 96 20 140 31 226 80 423 137 545 82 177 147 302 202
+385 14 22 31 48 36 56 91 146 219 268 325 309 19 7 40 16 45 20 6 3 29 12 52
+20 80 25 75 65 69 -522 -5 -566 -16 -768 -51 -923 -29 -133 -55 -214 -102
+-325 -9 -19 -22 -51 -30 -70 -31 -72 -132 -268 -191 -373 -12 -20 -31 -53 -42
+-72 -11 -19 -29 -51 -40 -70 -11 -19 -30 -52 -41 -72 -12 -21 -29 -49 -38 -63
+-9 -14 -23 -37 -30 -51 -12 -25 -85 -120 -161 -209 -120 -142 -352 -440 -371
+-477 -21 -41 -22 -48 -10 -91 20 -77 41 -92 130 -92 88 0 115 13 190 88 51 52
+151 175 221 272 61 86 173 225 224 280 74 80 86 99 281 475 148 283 192 372
+203 402 12 36 29 43 38 16 3 -10 19 -53 35 -96 37 -99 85 -227 112 -297 43
+-114 142 -323 197 -415 17 -27 34 -59 39 -70 5 -12 16 -27 25 -34 9 -7 16 -19
+16 -25 0 -15 178 -255 237 -321 10 -11 47 -54 83 -95 36 -41 110 -122 165
+-179 l101 -103 83 -2 c81 -1 83 0 107 29 30 38 31 81 3 166 -23 69 -57 114
+-182 244 -130 133 -273 321 -357 470 -11 19 -30 52 -42 72 -66 116 -258 491
+-258 505 0 5 -9 27 -19 51 -48 105 -147 442 -186 632 -3 17 -10 109 -16 205
+-5 96 -14 227 -20 290 -5 63 -12 290 -15 504 l-5 389 35 -7 c40 -8 123 -49
+191 -96 98 -67 226 -220 317 -377 40 -69 118 -228 118 -241 0 -7 4 -20 10 -30
+10 -18 39 -106 60 -182 7 -25 16 -56 21 -70 4 -14 17 -68 29 -120 11 -52 25
+-114 30 -138 6 -23 10 -60 10 -83 0 -22 4 -70 9 -107 5 -37 15 -116 21 -177
+18 -179 32 -254 52 -272 10 -9 40 -18 66 -21 92 -8 148 39 178 151 16 61 18
+243 4 331 -6 33 -19 120 -30 191 -24 153 -62 316 -90 390 -5 11 -18 47 -30 80
+-46 125 -187 411 -240 485 -11 15 -20 31 -20 35 0 19 -168 244 -225 300 -137
+137 -261 206 -460 258 l-50 13 3 139 c2 77 7 176 10 220 l7 80 245 -3 c135 -2
+311 -7 393 -12 197 -12 329 1 375 37 36 27 62 76 62 118 0 17 -15 40 -43 68
+-47 48 -84 59 -242 77 -103 11 -1590 11 -1865 0z"></path>
+ <path d="M7924 3925 c-57 -25 -84 -82 -84 -182 0 -83 30 -159 87 -223 46 -51
+57 -58 142 -90 42 -15 45 -18 57 -70 26 -117 35 -261 21 -334 -14 -77 -21 -83
+-120 -121 -71 -27 -121 -67 -165 -132 -56 -83 -74 -141 -80 -264 -6 -147 24
+-238 104 -308 54 -47 91 -65 209 -100 39 -12 88 -27 109 -33 22 -7 65 -36 96
+-64 61 -57 87 -114 110 -244 6 -36 15 -85 20 -110 5 -25 14 -79 20 -120 6 -41
+15 -99 21 -129 5 -30 9 -225 9 -435 0 -427 5 -475 56 -534 28 -33 37 -37 80
+-37 62 0 118 26 132 62 11 29 13 55 33 373 12 199 6 580 -12 690 -28 177 -89
+415 -137 535 -66 166 -108 201 -367 300 -38 15 -84 33 -100 40 -17 8 -43 18
+-58 24 -43 16 -54 52 -36 118 12 49 19 58 57 79 28 16 59 24 89 24 25 0 84 4
+132 10 47 5 133 14 191 20 149 16 258 56 327 123 35 32 81 122 102 197 8 25
+17 58 22 74 12 37 11 86 0 139 -5 23 -15 69 -21 102 -17 83 -63 175 -113 224
+-102 100 -245 186 -327 196 -25 3 -117 1 -205 -3 -88 -4 -166 -6 -172 -4 -8 2
+-13 21 -13 42 0 44 -21 99 -47 121 -23 20 -108 59 -125 58 -7 0 -27 -7 -44
+-14z m658 -525 c87 -25 118 -82 118 -215 0 -101 -14 -140 -58 -161 -35 -17
+-189 -63 -209 -64 -10 0 -13 53 -13 231 l0 232 63 -6 c34 -4 79 -11 99 -17z"></path>
+ <path d="M7523 3860 c-58 -35 -66 -66 -59 -220 3 -74 9 -167 12 -207 6 -70 6
+-72 -17 -77 -13 -3 -109 -7 -214 -8 l-190 -3 4 186 c4 208 -2 233 -62 269 -80
+49 -174 -5 -201 -115 -4 -16 -11 -95 -16 -175 -4 -80 -13 -221 -20 -315 -12
+-172 -6 -468 10 -535 4 -19 14 -60 20 -90 33 -156 63 -209 143 -259 71 -44
+132 -55 297 -55 137 -1 164 2 230 24 64 20 84 33 135 84 104 104 146 227 176
+518 13 126 11 184 -26 743 -13 198 -44 255 -138 255 -34 0 -63 -7 -84 -20z
+m-55 -845 c19 -7 17 -326 -3 -365 -19 -36 -57 -63 -120 -85 -78 -26 -136 -30
+-173 -11 -52 27 -64 53 -102 231 -7 33 -22 76 -32 95 -21 35 -20 68 1 123 l11
+28 203 -6 c111 -4 208 -8 215 -10z"></path>
+ </g>
+</svg>
diff --git a/js/styles.css b/assets/input.css
index 4b288be..4b288be 100644
--- a/js/styles.css
+++ b/assets/input.css
diff --git a/assets/soyjaks/addict.png b/assets/soyjaks/addict.png
new file mode 100644
index 0000000..98b6443
--- /dev/null
+++ b/assets/soyjaks/addict.png
Binary files differ
diff --git a/assets/soyjaks/adulterer.png b/assets/soyjaks/adulterer.png
new file mode 100644
index 0000000..c2b6c18
--- /dev/null
+++ b/assets/soyjaks/adulterer.png
Binary files differ
diff --git a/assets/soyjaks/billions.png b/assets/soyjaks/billions.png
new file mode 100644
index 0000000..08324d7
--- /dev/null
+++ b/assets/soyjaks/billions.png
Binary files differ
diff --git a/assets/soyjaks/bloomer.png b/assets/soyjaks/bloomer.png
new file mode 100644
index 0000000..d5aa4cc
--- /dev/null
+++ b/assets/soyjaks/bloomer.png
Binary files differ
diff --git a/assets/soyjaks/chudcry.jpeg b/assets/soyjaks/chudcry.jpeg
new file mode 100644
index 0000000..388ab4c
--- /dev/null
+++ b/assets/soyjaks/chudcry.jpeg
Binary files differ
diff --git a/assets/soyjaks/chudjak.png b/assets/soyjaks/chudjak.png
new file mode 100644
index 0000000..6b3c0b3
--- /dev/null
+++ b/assets/soyjaks/chudjak.png
Binary files differ
diff --git a/assets/soyjaks/chudsmile.png b/assets/soyjaks/chudsmile.png
new file mode 100644
index 0000000..c3f990b
--- /dev/null
+++ b/assets/soyjaks/chudsmile.png
Binary files differ
diff --git a/assets/soyjaks/coomer.png b/assets/soyjaks/coomer.png
new file mode 100644
index 0000000..912ae31
--- /dev/null
+++ b/assets/soyjaks/coomer.png
Binary files differ
diff --git a/assets/soyjaks/crychud.png b/assets/soyjaks/crychud.png
new file mode 100644
index 0000000..ff5dc56
--- /dev/null
+++ b/assets/soyjaks/crychud.png
Binary files differ
diff --git a/assets/soyjaks/cuck.png b/assets/soyjaks/cuck.png
new file mode 100644
index 0000000..4fbf9a6
--- /dev/null
+++ b/assets/soyjaks/cuck.png
Binary files differ
diff --git a/assets/soyjaks/eunuch.png b/assets/soyjaks/eunuch.png
new file mode 100644
index 0000000..ffa1f57
--- /dev/null
+++ b/assets/soyjaks/eunuch.png
Binary files differ
diff --git a/assets/soyjaks/fatjak.png b/assets/soyjaks/fatjak.png
new file mode 100644
index 0000000..6daa4b7
--- /dev/null
+++ b/assets/soyjaks/fatjak.png
Binary files differ
diff --git a/assets/soyjaks/friendzoned.png b/assets/soyjaks/friendzoned.png
new file mode 100644
index 0000000..ef6f141
--- /dev/null
+++ b/assets/soyjaks/friendzoned.png
Binary files differ
diff --git a/assets/soyjaks/furry.png b/assets/soyjaks/furry.png
new file mode 100644
index 0000000..1300a58
--- /dev/null
+++ b/assets/soyjaks/furry.png
Binary files differ
diff --git a/assets/soyjaks/gay.png b/assets/soyjaks/gay.png
new file mode 100644
index 0000000..4c36b92
--- /dev/null
+++ b/assets/soyjaks/gay.png
Binary files differ
diff --git a/assets/soyjaks/griller.png b/assets/soyjaks/griller.png
new file mode 100644
index 0000000..a76bc5f
--- /dev/null
+++ b/assets/soyjaks/griller.png
Binary files differ
diff --git a/assets/soyjaks/grinsoy.jpg b/assets/soyjaks/grinsoy.jpg
new file mode 100644
index 0000000..74952a1
--- /dev/null
+++ b/assets/soyjaks/grinsoy.jpg
Binary files differ
diff --git a/assets/soyjaks/groomer.png b/assets/soyjaks/groomer.png
new file mode 100644
index 0000000..a441e7c
--- /dev/null
+++ b/assets/soyjaks/groomer.png
Binary files differ
diff --git a/assets/soyjaks/grooomer.png b/assets/soyjaks/grooomer.png
new file mode 100644
index 0000000..948c28b
--- /dev/null
+++ b/assets/soyjaks/grooomer.png
Binary files differ
diff --git a/assets/soyjaks/husband.png b/assets/soyjaks/husband.png
new file mode 100644
index 0000000..72bd6af
--- /dev/null
+++ b/assets/soyjaks/husband.png
Binary files differ
diff --git a/assets/soyjaks/improover.png b/assets/soyjaks/improover.png
new file mode 100644
index 0000000..11cda55
--- /dev/null
+++ b/assets/soyjaks/improover.png
Binary files differ
diff --git a/assets/soyjaks/incel.png b/assets/soyjaks/incel.png
new file mode 100644
index 0000000..95e0fb5
--- /dev/null
+++ b/assets/soyjaks/incel.png
Binary files differ
diff --git a/assets/soyjaks/mouthjak.png b/assets/soyjaks/mouthjak.png
new file mode 100644
index 0000000..6620927
--- /dev/null
+++ b/assets/soyjaks/mouthjak.png
Binary files differ
diff --git a/assets/soyjaks/normal.png b/assets/soyjaks/normal.png
new file mode 100644
index 0000000..79c9c25
--- /dev/null
+++ b/assets/soyjaks/normal.png
Binary files differ
diff --git a/assets/soyjaks/partner.png b/assets/soyjaks/partner.png
new file mode 100644
index 0000000..405db27
--- /dev/null
+++ b/assets/soyjaks/partner.png
Binary files differ
diff --git a/assets/soyjaks/paypig.png b/assets/soyjaks/paypig.png
new file mode 100644
index 0000000..165551d
--- /dev/null
+++ b/assets/soyjaks/paypig.png
Binary files differ
diff --git a/assets/soyjaks/pervert.png b/assets/soyjaks/pervert.png
new file mode 100644
index 0000000..cb3c8e2
--- /dev/null
+++ b/assets/soyjaks/pervert.png
Binary files differ
diff --git a/assets/soyjaks/polygamist.png b/assets/soyjaks/polygamist.png
new file mode 100644
index 0000000..9188ab6
--- /dev/null
+++ b/assets/soyjaks/polygamist.png
Binary files differ
diff --git a/assets/soyjaks/pua.png b/assets/soyjaks/pua.png
new file mode 100644
index 0000000..dca85a5
--- /dev/null
+++ b/assets/soyjaks/pua.png
Binary files differ
diff --git a/assets/soyjaks/pussyhound.png b/assets/soyjaks/pussyhound.png
new file mode 100644
index 0000000..6dfaa7b
--- /dev/null
+++ b/assets/soyjaks/pussyhound.png
Binary files differ
diff --git a/assets/soyjaks/redditjak.png b/assets/soyjaks/redditjak.png
new file mode 100644
index 0000000..3a3c65f
--- /dev/null
+++ b/assets/soyjaks/redditjak.png
Binary files differ
diff --git a/assets/soyjaks/smartjak.jpeg b/assets/soyjaks/smartjak.jpeg
new file mode 100644
index 0000000..32a3583
--- /dev/null
+++ b/assets/soyjaks/smartjak.jpeg
Binary files differ
diff --git a/assets/soyjaks/soyjak.png b/assets/soyjaks/soyjak.png
new file mode 100644
index 0000000..6133175
--- /dev/null
+++ b/assets/soyjaks/soyjak.png
Binary files differ
diff --git a/assets/soyjaks/sugardaddy.png b/assets/soyjaks/sugardaddy.png
new file mode 100644
index 0000000..a15a9f2
--- /dev/null
+++ b/assets/soyjaks/sugardaddy.png
Binary files differ
diff --git a/assets/soyjaks/tranny.png b/assets/soyjaks/tranny.png
new file mode 100644
index 0000000..1ade67f
--- /dev/null
+++ b/assets/soyjaks/tranny.png
Binary files differ
diff --git a/assets/soyjaks/troon.png b/assets/soyjaks/troon.png
new file mode 100644
index 0000000..9053330
--- /dev/null
+++ b/assets/soyjaks/troon.png
Binary files differ
diff --git a/assets/soyjaks/twink.png b/assets/soyjaks/twink.png
new file mode 100644
index 0000000..9869ff7
--- /dev/null
+++ b/assets/soyjaks/twink.png
Binary files differ
diff --git a/assets/soyjaks/volcel.png b/assets/soyjaks/volcel.png
new file mode 100644
index 0000000..32cf50d
--- /dev/null
+++ b/assets/soyjaks/volcel.png
Binary files differ
diff --git a/assets/soyjaks/weeb.png b/assets/soyjaks/weeb.png
new file mode 100644
index 0000000..e664c90
--- /dev/null
+++ b/assets/soyjaks/weeb.png
Binary files differ
diff --git a/js/output.css b/assets/styles.css
index 97c7dfe..9b0a153 100644
--- a/js/output.css
+++ b/assets/styles.css
@@ -1,20 +1,12 @@
-/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
+/*! tailwindcss v4.1.10 | MIT License | https://tailwindcss.com */
@layer properties;
@layer theme, base, components, utilities;
@layer theme {
:root, :host {
- --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
- "Courier New", monospace;
- --color-red-100: oklch(93.6% 0.032 17.717);
- --color-red-600: oklch(57.7% 0.245 27.325);
- --color-green-100: oklch(96.2% 0.044 156.743);
- --color-green-500: oklch(72.3% 0.219 149.579);
- --color-green-600: oklch(62.7% 0.194 149.214);
- --color-blue-100: oklch(93.2% 0.032 255.585);
- --color-blue-200: oklch(88.2% 0.059 254.128);
- --color-blue-600: oklch(54.6% 0.245 262.881);
+ --font-sans: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
+ 'Noto Color Emoji';
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',
+ monospace;
--color-gray-50: oklch(98.5% 0.002 247.839);
--color-gray-300: oklch(87.2% 0.01 258.338);
--color-gray-600: oklch(44.6% 0.03 256.802);
@@ -23,25 +15,14 @@
--color-black: #000;
--color-white: #fff;
--spacing: 0.25rem;
- --container-md: 28rem;
--container-4xl: 56rem;
- --container-6xl: 72rem;
- --text-xs: 0.75rem;
- --text-xs--line-height: calc(1 / 0.75);
--text-sm: 0.875rem;
--text-sm--line-height: calc(1.25 / 0.875);
--text-2xl: 1.5rem;
--text-2xl--line-height: calc(2 / 1.5);
- --text-3xl: 1.875rem;
- --text-3xl--line-height: calc(2.25 / 1.875);
--text-5xl: 3rem;
--text-5xl--line-height: 1;
- --text-6xl: 3.75rem;
- --text-6xl--line-height: 1;
--font-weight-medium: 500;
- --font-weight-semibold: 600;
- --font-weight-bold: 700;
- --animate-spin: spin 1s linear infinite;
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
--default-font-family: var(--font-sans);
@@ -59,7 +40,7 @@
line-height: 1.5;
-webkit-text-size-adjust: 100%;
tab-size: 4;
- font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
+ font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji');
font-feature-settings: var(--default-font-feature-settings, normal);
font-variation-settings: var(--default-font-variation-settings, normal);
-webkit-tap-highlight-color: transparent;
@@ -86,7 +67,7 @@
font-weight: bolder;
}
code, kbd, samp, pre {
- font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
font-feature-settings: var(--default-mono-font-feature-settings, normal);
font-variation-settings: var(--default-mono-font-variation-settings, normal);
font-size: 1em;
@@ -183,17 +164,20 @@
:-moz-ui-invalid {
box-shadow: none;
}
- button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
+ button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button {
appearance: button;
}
::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
height: auto;
}
- [hidden]:where(:not([hidden="until-found"])) {
+ [hidden]:where(:not([hidden='until-found'])) {
display: none !important;
}
}
@layer utilities {
+ .static {
+ position: static;
+ }
.container {
width: 100%;
@media (width >= 40rem) {
@@ -212,116 +196,42 @@
max-width: 96rem;
}
}
+ .m-55 {
+ margin: calc(var(--spacing) * 55);
+ }
.mx-auto {
margin-inline: auto;
}
- .mr-2 {
- margin-right: calc(var(--spacing) * 2);
- }
.mb-2 {
margin-bottom: calc(var(--spacing) * 2);
}
- .mb-4 {
- margin-bottom: calc(var(--spacing) * 4);
- }
.mb-8 {
margin-bottom: calc(var(--spacing) * 8);
}
.flex {
display: flex;
}
- .grid {
- display: grid;
- }
- .table {
- display: table;
- }
- .h-4 {
- height: calc(var(--spacing) * 4);
- }
- .h-6 {
- height: calc(var(--spacing) * 6);
- }
- .h-12 {
- height: calc(var(--spacing) * 12);
- }
.min-h-screen {
min-height: 100vh;
}
.w-4 {
width: calc(var(--spacing) * 4);
}
- .w-6 {
- width: calc(var(--spacing) * 6);
- }
- .w-12 {
- width: calc(var(--spacing) * 12);
- }
- .w-\[20px\] {
- width: 20px;
- }
.w-\[60px\] {
width: 60px;
}
- .w-full {
- width: 100%;
- }
.max-w-4xl {
max-width: var(--container-4xl);
}
- .max-w-6xl {
- max-width: var(--container-6xl);
- }
- .max-w-md {
- max-width: var(--container-md);
- }
- .flex-1 {
- flex: 1;
- }
- .border-collapse {
- border-collapse: collapse;
- }
.transform {
transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
}
- .animate-spin {
- animation: var(--animate-spin);
- }
- .cursor-pointer {
- cursor: pointer;
- }
- .resize {
- resize: both;
- }
- .grid-cols-1 {
- grid-template-columns: repeat(1, minmax(0, 1fr));
- }
.items-center {
align-items: center;
}
.justify-between {
justify-content: space-between;
}
- .justify-center {
- justify-content: center;
- }
- .gap-4 {
- gap: calc(var(--spacing) * 4);
- }
- .space-y-2 {
- :where(& > :not(:last-child)) {
- --tw-space-y-reverse: 0;
- margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));
- margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
- }
- }
- .space-y-4 {
- :where(& > :not(:last-child)) {
- --tw-space-y-reverse: 0;
- margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
- margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
- }
- }
.space-y-12 {
:where(& > :not(:last-child)) {
--tw-space-y-reverse: 0;
@@ -329,20 +239,6 @@
margin-block-end: calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)));
}
}
- .space-x-2 {
- :where(& > :not(:last-child)) {
- --tw-space-x-reverse: 0;
- margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));
- margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)));
- }
- }
- .space-x-3 {
- :where(& > :not(:last-child)) {
- --tw-space-x-reverse: 0;
- margin-inline-start: calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse));
- margin-inline-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse)));
- }
- }
.space-x-6 {
:where(& > :not(:last-child)) {
--tw-space-x-reverse: 0;
@@ -350,35 +246,12 @@
margin-inline-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-x-reverse)));
}
}
- .rounded-full {
- border-radius: calc(infinity * 1px);
- }
- .border {
- border-style: var(--tw-border-style);
- border-width: 1px;
- }
- .border-2 {
- border-style: var(--tw-border-style);
- border-width: 2px;
- }
.bg-black {
background-color: var(--color-black);
}
- .bg-blue-100 {
- background-color: var(--color-blue-100);
- }
.bg-gray-50 {
background-color: var(--color-gray-50);
}
- .bg-green-100 {
- background-color: var(--color-green-100);
- }
- .bg-red-100 {
- background-color: var(--color-red-100);
- }
- .p-4 {
- padding: calc(var(--spacing) * 4);
- }
.px-4 {
padding-inline: calc(var(--spacing) * 4);
}
@@ -388,9 +261,6 @@
.py-8 {
padding-block: calc(var(--spacing) * 8);
}
- .py-12 {
- padding-block: calc(var(--spacing) * 12);
- }
.text-center {
text-align: center;
}
@@ -398,91 +268,35 @@
font-size: var(--text-2xl);
line-height: var(--tw-leading, var(--text-2xl--line-height));
}
- .text-3xl {
- font-size: var(--text-3xl);
- line-height: var(--tw-leading, var(--text-3xl--line-height));
- }
.text-5xl {
font-size: var(--text-5xl);
line-height: var(--tw-leading, var(--text-5xl--line-height));
}
- .text-6xl {
- font-size: var(--text-6xl);
- line-height: var(--tw-leading, var(--text-6xl--line-height));
- }
.text-sm {
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
}
- .text-xs {
- font-size: var(--text-xs);
- line-height: var(--tw-leading, var(--text-xs--line-height));
- }
- .font-bold {
- --tw-font-weight: var(--font-weight-bold);
- font-weight: var(--font-weight-bold);
- }
.font-medium {
--tw-font-weight: var(--font-weight-medium);
font-weight: var(--font-weight-medium);
}
- .font-semibold {
- --tw-font-weight: var(--font-weight-semibold);
- font-weight: var(--font-weight-semibold);
- }
- .text-blue-600 {
- color: var(--color-blue-600);
- }
.text-gray-600 {
color: var(--color-gray-600);
}
.text-gray-900 {
color: var(--color-gray-900);
}
- .text-green-500 {
- color: var(--color-green-500);
- }
- .text-green-600 {
- color: var(--color-green-600);
- }
- .text-red-600 {
- color: var(--color-red-600);
- }
.text-white {
color: var(--color-white);
}
.italic {
font-style: italic;
}
- .underline {
- text-decoration-line: underline;
- }
- .outline {
- outline-style: var(--tw-outline-style);
- outline-width: 1px;
- }
- .transition {
- transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events;
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
- transition-duration: var(--tw-duration, var(--default-transition-duration));
- }
.transition-colors {
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
- .transition-shadow {
- transition-property: box-shadow;
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
- transition-duration: var(--tw-duration, var(--default-transition-duration));
- }
- .hover\:border-blue-200 {
- &:hover {
- @media (hover: hover) {
- border-color: var(--color-blue-200);
- }
- }
- }
.hover\:text-gray-300 {
&:hover {
@media (hover: hover) {
@@ -497,24 +311,6 @@
}
}
}
- .hover\:shadow-md {
- &:hover {
- @media (hover: hover) {
- --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
- }
- }
- }
- .md\:grid-cols-2 {
- @media (width >= 48rem) {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
- }
- .lg\:grid-cols-3 {
- @media (width >= 64rem) {
- grid-template-columns: repeat(3, minmax(0, 1fr));
- }
- }
}
:root {
--red05: rgba(255, 65, 54, 0.05);
@@ -676,90 +472,10 @@ input[type="submit"], button, .button {
inherits: false;
initial-value: 0;
}
-@property --tw-border-style {
- syntax: "*";
- inherits: false;
- initial-value: solid;
-}
@property --tw-font-weight {
syntax: "*";
inherits: false;
}
-@property --tw-outline-style {
- syntax: "*";
- inherits: false;
- initial-value: solid;
-}
-@property --tw-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@property --tw-shadow-color {
- syntax: "*";
- inherits: false;
-}
-@property --tw-shadow-alpha {
- syntax: "<percentage>";
- inherits: false;
- initial-value: 100%;
-}
-@property --tw-inset-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@property --tw-inset-shadow-color {
- syntax: "*";
- inherits: false;
-}
-@property --tw-inset-shadow-alpha {
- syntax: "<percentage>";
- inherits: false;
- initial-value: 100%;
-}
-@property --tw-ring-color {
- syntax: "*";
- inherits: false;
-}
-@property --tw-ring-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@property --tw-inset-ring-color {
- syntax: "*";
- inherits: false;
-}
-@property --tw-inset-ring-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@property --tw-ring-inset {
- syntax: "*";
- inherits: false;
-}
-@property --tw-ring-offset-width {
- syntax: "<length>";
- inherits: false;
- initial-value: 0px;
-}
-@property --tw-ring-offset-color {
- syntax: "*";
- inherits: false;
- initial-value: #fff;
-}
-@property --tw-ring-offset-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
@layer properties {
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
*, ::before, ::after, ::backdrop {
@@ -770,23 +486,7 @@ input[type="submit"], button, .button {
--tw-skew-y: initial;
--tw-space-y-reverse: 0;
--tw-space-x-reverse: 0;
- --tw-border-style: solid;
--tw-font-weight: initial;
- --tw-outline-style: solid;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-color: initial;
- --tw-shadow-alpha: 100%;
- --tw-inset-shadow: 0 0 #0000;
- --tw-inset-shadow-color: initial;
- --tw-inset-shadow-alpha: 100%;
- --tw-ring-color: initial;
- --tw-ring-shadow: 0 0 #0000;
- --tw-inset-ring-color: initial;
- --tw-inset-ring-shadow: 0 0 #0000;
- --tw-ring-inset: initial;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-offset-shadow: 0 0 #0000;
}
}
}
diff --git a/dune b/dune
new file mode 100644
index 0000000..509d512
--- /dev/null
+++ b/dune
@@ -0,0 +1,6 @@
+(rule
+ (target styles.css)
+ (deps
+ (glob_files_rec assets/*))
+ (action
+ (bash "sh tailwind.sh")))
diff --git a/dune-project b/dune-project
index 3b0ab08..b8e5d6a 100644
--- a/dune-project
+++ b/dune-project
@@ -1,5 +1,7 @@
(lang dune 3.19)
+(using directory-targets 0.1)
+
(name bs5)
(generate_opam_files true)
diff --git a/flake.nix b/flake.nix
index 19f3b33..75cdd2a 100644
--- a/flake.nix
+++ b/flake.nix
@@ -173,6 +173,7 @@
nativeBuildInputs = with pkgs.ocamlPackages; [
pkgs.openjdk17
pkgs.nodejs
+ pkgs.tailwindcss_4
pkgs.sqlite
pkgs.dune_3
pkgs.ocaml
diff --git a/js/.gitignore b/js/.gitignore
deleted file mode 100644
index a14702c..0000000
--- a/js/.gitignore
+++ /dev/null
@@ -1,34 +0,0 @@
-# dependencies (bun install)
-node_modules
-
-# output
-out
-dist
-*.tgz
-
-# code coverage
-coverage
-*.lcov
-
-# logs
-logs
-_.log
-report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
-
-# dotenv environment variable files
-.env
-.env.development.local
-.env.test.local
-.env.production.local
-.env.local
-
-# caches
-.eslintcache
-.cache
-*.tsbuildinfo
-
-# IntelliJ based IDEs
-.idea
-
-# Finder (MacOS) folder config
-.DS_Store
diff --git a/js/Pepe.tsx b/js/Pepe.tsx
deleted file mode 100644
index e247f9a..0000000
--- a/js/Pepe.tsx
+++ /dev/null
@@ -1,369 +0,0 @@
-"use client";
-
-import type React from "react";
-
-import { useState } from "react";
-import { Button } from "@/components/ui/button";
-import { Input } from "@/components/ui/input";
-import { Label } from "@/components/ui/label";
-import {
- Card,
- CardContent,
- CardDescription,
- CardHeader,
- CardTitle,
-} from "@/components/ui/card";
-import { Alert, AlertDescription } from "@/components/ui/alert";
-import {
- Loader2,
- Server,
- MapPin,
- CheckCircle,
- AlertCircle,
- Key,
-} from "lucide-react";
-
-// Mock data for locations
-const mockLocations = [
- {
- id: "nyc",
- city: "New York",
- country: "United States",
- flag: "πŸ‡ΊπŸ‡Έ",
- region: "North America",
- },
- {
- id: "lon",
- city: "London",
- country: "United Kingdom",
- flag: "πŸ‡¬πŸ‡§",
- region: "Europe",
- },
- {
- id: "fra",
- city: "Frankfurt",
- country: "Germany",
- flag: "πŸ‡©πŸ‡ͺ",
- region: "Europe",
- },
- {
- id: "sgp",
- city: "Singapore",
- country: "Singapore",
- flag: "πŸ‡ΈπŸ‡¬",
- region: "Asia Pacific",
- },
- {
- id: "tok",
- city: "Tokyo",
- country: "Japan",
- flag: "πŸ‡―πŸ‡΅",
- region: "Asia Pacific",
- },
- {
- id: "syd",
- city: "Sydney",
- country: "Australia",
- flag: "πŸ‡¦πŸ‡Ί",
- region: "Asia Pacific",
- },
- {
- id: "tor",
- city: "Toronto",
- country: "Canada",
- flag: "πŸ‡¨πŸ‡¦",
- region: "North America",
- },
- {
- id: "ams",
- city: "Amsterdam",
- country: "Netherlands",
- flag: "πŸ‡³πŸ‡±",
- region: "Europe",
- },
-];
-
-type Step = "api-key" | "location-select" | "creating" | "success" | "error";
-
-interface Location {
- id: string;
- city: string;
- country: string;
- flag: string;
- region: string;
-}
-
-export default function VPSProvider() {
- const [step, setStep] = useState<Step>("api-key");
- const [apiKey, setApiKey] = useState("");
- const [selectedLocation, setSelectedLocation] = useState<Location | null>(
- null,
- );
- const [error, setError] = useState("");
- const [isValidating, setIsValidating] = useState(false);
- const [isCreating, setIsCreating] = useState(false);
-
- // Mock API key validation
- const validateApiKey = async (key: string) => {
- setIsValidating(true);
- setError("");
-
- // Simulate API call
- await new Promise((resolve) => setTimeout(resolve, 1500));
-
- // Mock validation - accept keys that are at least 20 characters
- if (key.length >= 20) {
- setStep("location-select");
- } else {
- setError("Invalid API key. Please check your credentials and try again.");
- }
-
- setIsValidating(false);
- };
-
- // Mock VPS creation
- const createVPS = async (location: Location) => {
- setIsCreating(true);
- setError("");
- setStep("creating");
-
- // Simulate VPS creation
- await new Promise((resolve) => setTimeout(resolve, 3000));
-
- // Mock success/failure (90% success rate)
- if (Math.random() > 0.1) {
- setStep("success");
- } else {
- setError("Failed to create VPS. Please try again or contact support.");
- setStep("error");
- }
-
- setIsCreating(false);
- };
-
- const handleApiKeySubmit = (e: React.FormEvent) => {
- e.preventDefault();
- if (apiKey.trim()) {
- validateApiKey(apiKey.trim());
- }
- };
-
- const handleLocationSelect = (location: Location) => {
- setSelectedLocation(location);
- createVPS(location);
- };
-
- const handleRetry = () => {
- setError("");
- setStep("location-select");
- setSelectedLocation(null);
- };
-
- const handleNext = () => {
- // This is where the user's flow continues
- console.log("Proceeding to next step...");
- };
-
- const renderApiKeyStep = () => (
- <Card className="w-full max-w-md mx-auto">
- <CardHeader className="text-center">
- <div className="mx-auto w-[20px] h-12 bg-blue-100 rounded-full flex items-center justify-center mb-4">
- <Key className="w-6 h-4 text-blue-600" />
- </div>
- <CardTitle>Connect Your Account</CardTitle>
- <CardDescription>
- Enter your API key to get started with VPS deployment
- </CardDescription>
- </CardHeader>
- <CardContent>
- <form onSubmit={handleApiKeySubmit} className="space-y-4">
- <div className="space-y-2">
- <Label htmlFor="apiKey">API Key</Label>
- <Input
- id="apiKey"
- type="password"
- placeholder="Enter your API key..."
- value={apiKey}
- onChange={(e) => setApiKey(e.target.value)}
- disabled={isValidating}
- />
- </div>
-
- {error && (
- <Alert variant="destructive">
- <AlertCircle className="h-4 w-4" />
- <AlertDescription>{error}</AlertDescription>
- </Alert>
- )}
-
- <Button
- type="submit"
- className="w-full"
- disabled={!apiKey.trim() || isValidating}
- >
- {isValidating ? (
- <>
- <Loader2 className="mr-2 h-4 w-4 animate-spin" />
- Validating...
- </>
- ) : (
- "Validate API Key"
- )}
- </Button>
- </form>
- </CardContent>
- </Card>
- );
-
- const renderLocationSelect = () => (
- <Card className="w-full max-w-4xl mx-auto">
- <CardHeader className="text-center">
- <div className="mx-auto w-12 h-12 bg-green-100 rounded-full flex items-center justify-center mb-4">
- <MapPin className="w-6 h-6 text-green-500" />
- </div>
- <CardTitle>Choose Server Location</CardTitle>
- <CardDescription>
- Select the location where you want to deploy your VPS
- </CardDescription>
- </CardHeader>
- <CardContent>
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
- {mockLocations.map((location) => (
- <Card
- key={location.id}
- className="cursor-pointer hover:shadow-md transition-shadow border-2 hover:border-blue-200"
- onClick={() => handleLocationSelect(location)}
- >
- <CardContent className="p-4">
- <div className="flex items-center space-x-3">
- <span className="text-2xl">{location.flag}</span>
- <div className="flex-1">
- <h3 className="font-semibold">{location.city}</h3>
- <p className="text-sm text-muted-foreground">
- {location.country}
- </p>
- <p className="text-xs text-muted-foreground">
- {location.region}
- </p>
- </div>
- </div>
- </CardContent>
- </Card>
- ))}
- </div>
- </CardContent>
- </Card>
- );
-
- const renderCreating = () => (
- <Card className="w-full max-w-md mx-auto">
- <CardHeader className="text-center">
- <div className="mx-auto w-12 h-12 bg-blue-100 rounded-full flex items-center justify-center mb-4">
- <Loader2 className="w-6 h-6 text-blue-600 animate-spin" />
- </div>
- <CardTitle>Creating Your VPS</CardTitle>
- <CardDescription>
- Setting up your server in {selectedLocation?.city},{" "}
- {selectedLocation?.country}
- </CardDescription>
- </CardHeader>
- <CardContent className="text-center">
- <div className="flex items-center justify-center space-x-2 mb-4">
- <span className="text-2xl">{selectedLocation?.flag}</span>
- <span className="font-medium">{selectedLocation?.city}</span>
- </div>
- <p className="text-sm text-muted-foreground">
- This may take a few minutes. Please don't close this window.
- </p>
- </CardContent>
- </Card>
- );
-
- const renderSuccess = () => (
- <Card className="w-full max-w-md mx-auto">
- <CardHeader className="text-center">
- <div className="mx-auto w-12 h-12 bg-green-100 rounded-full flex items-center justify-center mb-4">
- <CheckCircle className="w-6 h-6 text-green-600" />
- </div>
- <CardTitle>VPS Created Successfully!</CardTitle>
- <CardDescription>
- Your server is ready in {selectedLocation?.city},{" "}
- {selectedLocation?.country}
- </CardDescription>
- </CardHeader>
- <CardContent className="text-center space-y-4">
- <div className="flex items-center justify-center space-x-2 mb-4">
- <span className="text-2xl">{selectedLocation?.flag}</span>
- <span className="font-medium">{selectedLocation?.city}</span>
- </div>
-
- <Alert>
- <Server className="h-4 w-4" />
- <AlertDescription>
- Your VPS is now online and ready to use!
- </AlertDescription>
- </Alert>
-
- <Button onClick={handleNext} className="w-full">
- Next
- </Button>
- </CardContent>
- </Card>
- );
-
- const renderError = () => (
- <Card className="w-full max-w-md mx-auto">
- <CardHeader className="text-center">
- <div className="mx-auto w-12 h-12 bg-red-100 rounded-full flex items-center justify-center mb-4">
- <AlertCircle className="w-6 h-6 text-red-600" />
- </div>
- <CardTitle>Creation Failed</CardTitle>
- <CardDescription>
- We couldn't create your VPS at this time
- </CardDescription>
- </CardHeader>
- <CardContent className="text-center space-y-4">
- {error && (
- <Alert variant="destructive">
- <AlertCircle className="h-4 w-4" />
- <AlertDescription>{error}</AlertDescription>
- </Alert>
- )}
-
- <div className="flex space-x-2">
- <Button variant="outline" onClick={handleRetry} className="flex-1">
- Try Again
- </Button>
- <Button
- variant="outline"
- onClick={() => setStep("api-key")}
- className="flex-1"
- >
- Start Over
- </Button>
- </div>
- </CardContent>
- </Card>
- );
-
- return (
- <div className="min-h-screen bg-gray-50 py-12 px-4">
- <div className="max-w-6xl mx-auto">
- <div className="text-center mb-8">
- <h1 className="text-3xl font-bold text-gray-900 mb-2">
- Cloud VPS Deployment
- </h1>
- <p className="text-gray-600">
- Deploy your virtual private server in minutes
- </p>
- </div>
-
- {step === "api-key" && renderApiKeyStep()}
- {step === "location-select" && renderLocationSelect()}
- {step === "creating" && renderCreating()}
- {step === "success" && renderSuccess()}
- {step === "error" && renderError()}
- </div>
- </div>
- );
-}
diff --git a/js/README.md b/js/README.md
deleted file mode 100644
index 874ec57..0000000
--- a/js/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# js
-
-To install dependencies:
-
-```bash
-bun install
-```
-
-To run:
-
-```bash
-bun run index.ts
-```
-
-This project was created using `bun init` in bun v1.2.16. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
diff --git a/js/bun.lock b/js/bun.lock
deleted file mode 100644
index 432f5f9..0000000
--- a/js/bun.lock
+++ /dev/null
@@ -1,189 +0,0 @@
-{
- "lockfileVersion": 1,
- "workspaces": {
- "": {
- "name": "js",
- "dependencies": {
- "@tailwindcss/cli": "^4.1.11",
- "tailwindcss": "^4.1.11",
- },
- "devDependencies": {
- "@types/bun": "latest",
- },
- "peerDependencies": {
- "typescript": "^5",
- },
- },
- },
- "packages": {
- "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="],
-
- "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="],
-
- "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="],
-
- "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
-
- "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="],
-
- "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
-
- "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="],
-
- "@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="],
-
- "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.1", "", { "os": "android", "cpu": "arm64" }, "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA=="],
-
- "@parcel/watcher-darwin-arm64": ["@parcel/watcher-darwin-arm64@2.5.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw=="],
-
- "@parcel/watcher-darwin-x64": ["@parcel/watcher-darwin-x64@2.5.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg=="],
-
- "@parcel/watcher-freebsd-x64": ["@parcel/watcher-freebsd-x64@2.5.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ=="],
-
- "@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.5.1", "", { "os": "linux", "cpu": "arm" }, "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA=="],
-
- "@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.5.1", "", { "os": "linux", "cpu": "arm" }, "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q=="],
-
- "@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.5.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w=="],
-
- "@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.5.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg=="],
-
- "@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A=="],
-
- "@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg=="],
-
- "@parcel/watcher-win32-arm64": ["@parcel/watcher-win32-arm64@2.5.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw=="],
-
- "@parcel/watcher-win32-ia32": ["@parcel/watcher-win32-ia32@2.5.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ=="],
-
- "@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.1", "", { "os": "win32", "cpu": "x64" }, "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA=="],
-
- "@tailwindcss/cli": ["@tailwindcss/cli@4.1.11", "", { "dependencies": { "@parcel/watcher": "^2.5.1", "@tailwindcss/node": "4.1.11", "@tailwindcss/oxide": "4.1.11", "enhanced-resolve": "^5.18.1", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "4.1.11" }, "bin": { "tailwindcss": "dist/index.mjs" } }, "sha512-7RAFOrVaXCFz5ooEG36Kbh+sMJiI2j4+Ozp71smgjnLfBRu7DTfoq8DsTvzse2/6nDeo2M3vS/FGaxfDgr3rtQ=="],
-
- "@tailwindcss/node": ["@tailwindcss/node@4.1.11", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.30.1", "magic-string": "^0.30.17", "source-map-js": "^1.2.1", "tailwindcss": "4.1.11" } }, "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q=="],
-
- "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.11", "", { "dependencies": { "detect-libc": "^2.0.4", "tar": "^7.4.3" }, "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.11", "@tailwindcss/oxide-darwin-arm64": "4.1.11", "@tailwindcss/oxide-darwin-x64": "4.1.11", "@tailwindcss/oxide-freebsd-x64": "4.1.11", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", "@tailwindcss/oxide-linux-x64-musl": "4.1.11", "@tailwindcss/oxide-wasm32-wasi": "4.1.11", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" } }, "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg=="],
-
- "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.11", "", { "os": "android", "cpu": "arm64" }, "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg=="],
-
- "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ=="],
-
- "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw=="],
-
- "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.11", "", { "os": "freebsd", "cpu": "x64" }, "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA=="],
-
- "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11", "", { "os": "linux", "cpu": "arm" }, "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg=="],
-
- "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ=="],
-
- "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ=="],
-
- "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.11", "", { "os": "linux", "cpu": "x64" }, "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg=="],
-
- "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.11", "", { "os": "linux", "cpu": "x64" }, "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q=="],
-
- "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.11", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@emnapi/wasi-threads": "^1.0.2", "@napi-rs/wasm-runtime": "^0.2.11", "@tybys/wasm-util": "^0.9.0", "tslib": "^2.8.0" }, "cpu": "none" }, "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g=="],
-
- "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w=="],
-
- "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.11", "", { "os": "win32", "cpu": "x64" }, "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg=="],
-
- "@types/bun": ["@types/bun@1.2.17", "", { "dependencies": { "bun-types": "1.2.17" } }, "sha512-l/BYs/JYt+cXA/0+wUhulYJB6a6p//GTPiJ7nV+QHa8iiId4HZmnu/3J/SowP5g0rTiERY2kfGKXEK5Ehltx4Q=="],
-
- "@types/node": ["@types/node@24.0.5", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-CXEG9E7GCTOZIre0WdDznmnhvF7xi7AmnP/zF496trmLiqlfdtxp9nPRgLVqfmJ8jgtcKcs0EcvOu2yDZSuvTg=="],
-
- "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
-
- "bun-types": ["bun-types@1.2.17", "", { "dependencies": { "@types/node": "*" } }, "sha512-ElC7ItwT3SCQwYZDYoAH+q6KT4Fxjl8DtZ6qDulUFBmXA8YB4xo+l54J9ZJN+k2pphfn9vk7kfubeSd5QfTVJQ=="],
-
- "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="],
-
- "detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="],
-
- "enhanced-resolve": ["enhanced-resolve@5.18.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ=="],
-
- "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
-
- "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
-
- "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
-
- "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
-
- "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
-
- "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="],
-
- "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="],
-
- "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="],
-
- "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA=="],
-
- "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig=="],
-
- "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.1", "", { "os": "linux", "cpu": "arm" }, "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q=="],
-
- "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw=="],
-
- "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ=="],
-
- "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw=="],
-
- "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ=="],
-
- "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA=="],
-
- "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="],
-
- "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="],
-
- "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
-
- "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="],
-
- "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="],
-
- "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="],
-
- "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="],
-
- "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="],
-
- "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
-
- "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
-
- "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
-
- "tailwindcss": ["tailwindcss@4.1.11", "", {}, "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA=="],
-
- "tapable": ["tapable@2.2.2", "", {}, "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg=="],
-
- "tar": ["tar@7.4.3", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="],
-
- "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
-
- "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="],
-
- "undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
-
- "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
-
- "@tailwindcss/oxide/detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="],
-
- "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="],
-
- "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="],
-
- "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="],
-
- "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.11", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.9.0" }, "bundled": true }, "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA=="],
-
- "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="],
-
- "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
- "lightningcss/detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="],
- }
-}
diff --git a/js/index.ts b/js/index.ts
deleted file mode 100644
index f67b2c6..0000000
--- a/js/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-console.log("Hello via Bun!"); \ No newline at end of file
diff --git a/js/package.json b/js/package.json
deleted file mode 100644
index 0c965de..0000000
--- a/js/package.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "name": "js",
- "module": "index.ts",
- "type": "module",
- "private": true,
- "devDependencies": {
- "@types/bun": "latest"
- },
- "peerDependencies": {
- "typescript": "^5"
- },
- "dependencies": {
- "@tailwindcss/cli": "^4.1.11",
- "tailwindcss": "^4.1.11"
- }
-}
diff --git a/js/tailwind.config.js b/js/tailwind.config.js
deleted file mode 100644
index e97787d..0000000
--- a/js/tailwind.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
- // files: ["../client/**/*.mlx","../server/**/*.mlx", "../universal/**/*.mlx"],
- content:{files: ["*.mlx", "../**/*.{js, ts, jsx, tsx}","../**/*.mlx"]},
- plugins: {},
-}
diff --git a/js/tsconfig.json b/js/tsconfig.json
deleted file mode 100644
index bfa0fea..0000000
--- a/js/tsconfig.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "compilerOptions": {
- // Environment setup & latest features
- "lib": ["ESNext"],
- "target": "ESNext",
- "module": "Preserve",
- "moduleDetection": "force",
- "jsx": "react-jsx",
- "allowJs": true,
-
- // Bundler mode
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "verbatimModuleSyntax": true,
- "noEmit": true,
-
- // Best practices
- "strict": true,
- "skipLibCheck": true,
- "noFallthroughCasesInSwitch": true,
- "noUncheckedIndexedAccess": true,
- "noImplicitOverride": true,
-
- // Some stricter flags (disabled by default)
- "noUnusedLocals": false,
- "noUnusedParameters": false,
- "noPropertyAccessFromIndexSignature": false
- }
-}
diff --git a/lib/pages/BlogIndex.mlx b/lib/pages/BlogIndex.mlx
index 3e036aa..7f13bed 100644
--- a/lib/pages/BlogIndex.mlx
+++ b/lib/pages/BlogIndex.mlx
@@ -15,6 +15,7 @@ module Layout = struct
<html>
<head>
<title>(React.string "Bloody Shovel 5")</title>
+ <link href="/styles.css" rel="stylesheet" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta charSet="UTF-8" />
</head>
diff --git a/tailwind.sh b/tailwind.sh
new file mode 100644
index 0000000..f059719
--- /dev/null
+++ b/tailwind.sh
@@ -0,0 +1 @@
+tailwindcss -i assets/input.css -o assets/styles.css