From: Taran Nathan Date: Mon, 1 Jun 2026 17:20:34 +0000 (-0700) Subject: first commit X-Git-Url: https://git.taranathan.com/?a=commitdiff_plain;h=7d2772252915da54b5a251d4e0154523e0a0d0ad;p=blog.git first commit --- 7d2772252915da54b5a251d4e0154523e0a0d0ad diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..56c686c --- /dev/null +++ b/content/_index.md @@ -0,0 +1,8 @@ ++++ +title = "Main Blog Page" +sort_by = "date" +template = "index.html" +page_template = "blog-page.html" ++++ + + diff --git a/content/blog/_index.md b/content/blog/_index.md new file mode 100644 index 0000000..e5b4f63 --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Blog posts" +sort_by = "date" +template = "blog.html" +page_template = "blog-page.html" ++++ diff --git a/content/blog/first.md b/content/blog/first.md new file mode 100644 index 0000000..e1336b1 --- /dev/null +++ b/content/blog/first.md @@ -0,0 +1,6 @@ ++++ +title = "first post" +date = 2026-04-16 ++++ + +first post diff --git a/content/blog/second.md b/content/blog/second.md new file mode 100644 index 0000000..ac36e06 --- /dev/null +++ b/content/blog/second.md @@ -0,0 +1,2 @@ ++++ ++++ diff --git a/content/miniblog/_index.md b/content/miniblog/_index.md new file mode 100644 index 0000000..35a9886 --- /dev/null +++ b/content/miniblog/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Miniblog/journal posts" +sort_by = "date" +template = "blog.html" +page_template = "miniblog-page.html" ++++ diff --git a/content/miniblog/firstmini.md b/content/miniblog/firstmini.md new file mode 100644 index 0000000..f44aae2 --- /dev/null +++ b/content/miniblog/firstmini.md @@ -0,0 +1,6 @@ ++++ +title = "first mini" +date = 2026-04-16 ++++ + +first mini post diff --git a/sass/main.scss b/sass/main.scss new file mode 100644 index 0000000..1b3862a --- /dev/null +++ b/sass/main.scss @@ -0,0 +1 @@ +$bg_color: linen; \ No newline at end of file diff --git a/sass/styles.scss b/sass/styles.scss new file mode 100644 index 0000000..5ecf1d0 --- /dev/null +++ b/sass/styles.scss @@ -0,0 +1,261 @@ +html { + background-color: linen; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; + border-radius: 5%; + background-color: linen; +} + +@font-face { + font-family: 'Funnel'; + src: url('fonts/Funnel_Display/static/FunnelDisplay-SemiBold.ttf') format('truetype'); +} + +@font-face { + font-family: 'BoldFunnel'; + src: url('fonts/Funnel_Display/static/FunnelDisplay-Bold.ttf') format('truetype'); +} + +@font-face { + font-family: 'Dosis'; + src: url('fonts/Dosis/static/Dosis-Medium.ttf') format('truetype'); +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: Funnel, Arial; +} + +p, +a { + font-family: Dosis, Arial; +} + +body { + min-height: 100vh; + overflow-x: hidden; + background: linen; + display: flex; +} + + +.container { + display: flex; + width: 100%; + min-height: 100vh; + position: relative; +} + +.kaomoji-sidebar { + position: fixed; + top: 0; + height: 100vh; + width: 60px; + font-size: 24px; + display: flex; + align-items: center; + justify-content: center; + background: linen; + overflow: hidden; + z-index: 100; +} + +.kaomoji-sidebar .scroll-text { + transform: rotate(.25turn); + white-space: nowrap; + animation: scroll 90s linear infinite; +} + +.kaomoji-left { + left: 0; + border-right: 1px solid #000; +} + +.kaomoji-right { + right: 0; + border-left: 1px solid #000; +} + +.kaomoji-right .scroll-text { + transform: rotate(.5turn); +} + +@keyframes scroll { + 0% { + transform: rotate(90deg) translateX(-64%); + } + + 100% { + transform: rotate(90deg) translateX(80%); + } +} + +.content { + flex: 1; + margin: 0 60px; + padding: 20px; + width: calc(100% - 120px); + max-width: 1400px; + margin-left: auto; + margin-right: auto; + position: relative; +} + +.section-container { + position: relative; + margin-bottom: 40px; +} + +.header { + position: relative; + padding: 40px; + margin-left: 40px; + background: transparent; + margin-bottom: 40px; + + h1 { + font-family: BoldFunnel; + } +} + +.header .nav .prooject { + text-size-adjust: .5; +} + +.header::after { + content: ''; + position: absolute; + bottom: -20px; + /* Position it outside the padding */ + left: -60px; + /* Extend past the left padding to reach sidebar */ + width: calc(100% + 120px); + /* Add extra width to reach both sidebars */ + height: 2px; + background: #000; + transform: rotate(-3deg); + transform-origin: center; +} + +.about-section { + position: relative; + padding: 40px; + background: transparent; + margin-bottom: 40px; + margin-left: 20px; +} + + +.project-section { + position: relative; + padding: 40px; + background: linen; + margin-bottom: 40px; + margin-left: 20px; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 40px; + align-items: center; +} + +.project-section::before { + content: ''; + position: absolute; + top: -20px; + left: -60px; + width: calc(100% + 120px); + height: 2px; + background: #000; + transform: rotate(3deg); + transform-origin: center; +} + + +.more-section { + position: relative; + padding: 40px; + margin-left: 20px; + background: linen; +} + +.more-section::before { + content: ''; + position: absolute; + top: -20px; + left: -60px; + width: calc(100% + 120px); + height: 2px; + background: #000; + transform: rotate(-5deg); + transform-origin: center; +} + +.image-placeholder { + border: 3px dashed #000; + border-radius: 10px; + height: 300px; + display: flex; + align-items: center; + justify-content: center; + font-size: 24px; +} + +nav { + display: flex; + gap: 20px; + margin-top: 20px; +} + +nav a { + color: #000; + text-decoration: none; + font-weight: bold; +} + +nav a:hover { + text-decoration: underline; +} + +h1 { + font-size: 2.5em; + margin-bottom: 10px; + color: #000; +} + +h2 { + font-size: 2em; + margin-bottom: 20px; + color: #000; +} + +p { + font-size: 1.1em; + line-height: 1.6; + color: #000; +} + +@media (max-width: 768px) { + .project-section { + grid-template-columns: 1fr; + } +} + +.decorations .stronk { + transform: rotate(6deg); + text-align: center; +} + +.woah { + transform: rotate(-8deg); + text-align: middle; + vertical-align: top; + font-family: Arial, Helvetica, sans-serif; +} \ No newline at end of file diff --git a/static/boo/index.html b/static/boo/index.html new file mode 100644 index 0000000..71733c0 --- /dev/null +++ b/static/boo/index.html @@ -0,0 +1,19 @@ + + + + + + moo + + + + + + +
+

BOO

+

I scared you

+
+ + + \ No newline at end of file diff --git a/static/boo/styles.css b/static/boo/styles.css new file mode 100644 index 0000000..075283f --- /dev/null +++ b/static/boo/styles.css @@ -0,0 +1,21 @@ +h1 { + font-family: Creepster; +} + +p { + font-family: Dosis; +} + +@font-face { + font-family: Creepster; + src: url(../fonts/Creepster/Creepster-Regular.ttf); +} + +@font-face { + font-family: 'Dosis'; + src: url('../fonts/Dosis/static/Dosis-Medium.ttf') format('truetype'); +} + +.container { + text-align: center; +} \ No newline at end of file diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..d46ff65 Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/fonts/Creepster/Creepster-Regular.ttf b/static/fonts/Creepster/Creepster-Regular.ttf new file mode 100644 index 0000000..e09c147 Binary files /dev/null and b/static/fonts/Creepster/Creepster-Regular.ttf differ diff --git a/static/fonts/Creepster/OFL.txt b/static/fonts/Creepster/OFL.txt new file mode 100644 index 0000000..0d26a28 --- /dev/null +++ b/static/fonts/Creepster/OFL.txt @@ -0,0 +1,94 @@ +Copyright (c) 2011, Font Diner, Inc (diner@fontdiner.com), +with Reserved Font Names "Creepster" + +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/static/fonts/Dosis/.DS_Store b/static/fonts/Dosis/.DS_Store new file mode 100644 index 0000000..2f8203c Binary files /dev/null and b/static/fonts/Dosis/.DS_Store differ diff --git a/static/fonts/Dosis/Dosis-VariableFont_wght.ttf b/static/fonts/Dosis/Dosis-VariableFont_wght.ttf new file mode 100644 index 0000000..49fe002 Binary files /dev/null and b/static/fonts/Dosis/Dosis-VariableFont_wght.ttf differ diff --git a/static/fonts/Dosis/OFL.txt b/static/fonts/Dosis/OFL.txt new file mode 100644 index 0000000..ea61257 --- /dev/null +++ b/static/fonts/Dosis/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2011 The Dosis Project Authors (https://github.com/googlefonts/dosis-vf) + +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/static/fonts/Dosis/README.txt b/static/fonts/Dosis/README.txt new file mode 100644 index 0000000..9cb7ccd --- /dev/null +++ b/static/fonts/Dosis/README.txt @@ -0,0 +1,69 @@ +Dosis Variable Font +=================== + +This download contains Dosis as both a variable font and static fonts. + +Dosis is a variable font with this axis: + wght + +This means all the styles are contained in a single file: + Dosis-VariableFont_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 Dosis: + static/Dosis-ExtraLight.ttf + static/Dosis-Light.ttf + static/Dosis-Regular.ttf + static/Dosis-Medium.ttf + static/Dosis-SemiBold.ttf + static/Dosis-Bold.ttf + static/Dosis-ExtraBold.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/static/fonts/Dosis/static/Dosis-Bold.ttf b/static/fonts/Dosis/static/Dosis-Bold.ttf new file mode 100644 index 0000000..14ecf9e Binary files /dev/null and b/static/fonts/Dosis/static/Dosis-Bold.ttf differ diff --git a/static/fonts/Dosis/static/Dosis-ExtraBold.ttf b/static/fonts/Dosis/static/Dosis-ExtraBold.ttf new file mode 100644 index 0000000..34d9cdd Binary files /dev/null and b/static/fonts/Dosis/static/Dosis-ExtraBold.ttf differ diff --git a/static/fonts/Dosis/static/Dosis-ExtraLight.ttf b/static/fonts/Dosis/static/Dosis-ExtraLight.ttf new file mode 100644 index 0000000..4f83dfd Binary files /dev/null and b/static/fonts/Dosis/static/Dosis-ExtraLight.ttf differ diff --git a/static/fonts/Dosis/static/Dosis-Light.ttf b/static/fonts/Dosis/static/Dosis-Light.ttf new file mode 100644 index 0000000..4a6b3fa Binary files /dev/null and b/static/fonts/Dosis/static/Dosis-Light.ttf differ diff --git a/static/fonts/Dosis/static/Dosis-Medium.ttf b/static/fonts/Dosis/static/Dosis-Medium.ttf new file mode 100644 index 0000000..02a1727 Binary files /dev/null and b/static/fonts/Dosis/static/Dosis-Medium.ttf differ diff --git a/static/fonts/Dosis/static/Dosis-Regular.ttf b/static/fonts/Dosis/static/Dosis-Regular.ttf new file mode 100644 index 0000000..f033747 Binary files /dev/null and b/static/fonts/Dosis/static/Dosis-Regular.ttf differ diff --git a/static/fonts/Dosis/static/Dosis-SemiBold.ttf b/static/fonts/Dosis/static/Dosis-SemiBold.ttf new file mode 100644 index 0000000..3eec77f Binary files /dev/null and b/static/fonts/Dosis/static/Dosis-SemiBold.ttf differ diff --git a/static/fonts/Funnel_Display/FunnelDisplay-VariableFont_wght.ttf b/static/fonts/Funnel_Display/FunnelDisplay-VariableFont_wght.ttf new file mode 100644 index 0000000..4988629 Binary files /dev/null and b/static/fonts/Funnel_Display/FunnelDisplay-VariableFont_wght.ttf differ diff --git a/static/fonts/Funnel_Display/OFL.txt b/static/fonts/Funnel_Display/OFL.txt new file mode 100644 index 0000000..7cd5008 --- /dev/null +++ b/static/fonts/Funnel_Display/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2024 The Funnel Project Authors (https://github.com/Dicotype/Funnel) + +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/static/fonts/Funnel_Display/README.txt b/static/fonts/Funnel_Display/README.txt new file mode 100644 index 0000000..6d3d8b1 --- /dev/null +++ b/static/fonts/Funnel_Display/README.txt @@ -0,0 +1,68 @@ +Funnel Display Variable Font +============================ + +This download contains Funnel Display as both a variable font and static fonts. + +Funnel Display is a variable font with this axis: + wght + +This means all the styles are contained in a single file: + FunnelDisplay-VariableFont_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 Funnel Display: + static/FunnelDisplay-Light.ttf + static/FunnelDisplay-Regular.ttf + static/FunnelDisplay-Medium.ttf + static/FunnelDisplay-SemiBold.ttf + static/FunnelDisplay-Bold.ttf + static/FunnelDisplay-ExtraBold.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/static/fonts/Funnel_Display/static/FunnelDisplay-Bold.ttf b/static/fonts/Funnel_Display/static/FunnelDisplay-Bold.ttf new file mode 100644 index 0000000..6343778 Binary files /dev/null and b/static/fonts/Funnel_Display/static/FunnelDisplay-Bold.ttf differ diff --git a/static/fonts/Funnel_Display/static/FunnelDisplay-ExtraBold.ttf b/static/fonts/Funnel_Display/static/FunnelDisplay-ExtraBold.ttf new file mode 100644 index 0000000..b854c23 Binary files /dev/null and b/static/fonts/Funnel_Display/static/FunnelDisplay-ExtraBold.ttf differ diff --git a/static/fonts/Funnel_Display/static/FunnelDisplay-Light.ttf b/static/fonts/Funnel_Display/static/FunnelDisplay-Light.ttf new file mode 100644 index 0000000..d81c384 Binary files /dev/null and b/static/fonts/Funnel_Display/static/FunnelDisplay-Light.ttf differ diff --git a/static/fonts/Funnel_Display/static/FunnelDisplay-Medium.ttf b/static/fonts/Funnel_Display/static/FunnelDisplay-Medium.ttf new file mode 100644 index 0000000..161adb5 Binary files /dev/null and b/static/fonts/Funnel_Display/static/FunnelDisplay-Medium.ttf differ diff --git a/static/fonts/Funnel_Display/static/FunnelDisplay-Regular.ttf b/static/fonts/Funnel_Display/static/FunnelDisplay-Regular.ttf new file mode 100644 index 0000000..c915375 Binary files /dev/null and b/static/fonts/Funnel_Display/static/FunnelDisplay-Regular.ttf differ diff --git a/static/fonts/Funnel_Display/static/FunnelDisplay-SemiBold.ttf b/static/fonts/Funnel_Display/static/FunnelDisplay-SemiBold.ttf new file mode 100644 index 0000000..4f932ed Binary files /dev/null and b/static/fonts/Funnel_Display/static/FunnelDisplay-SemiBold.ttf differ diff --git a/static/images/favicon.ico b/static/images/favicon.ico new file mode 100644 index 0000000..d46ff65 Binary files /dev/null and b/static/images/favicon.ico differ diff --git a/static/images/lizard.jpg b/static/images/lizard.jpg new file mode 100644 index 0000000..dffe881 Binary files /dev/null and b/static/images/lizard.jpg differ diff --git a/static/images/turtle.jpeg b/static/images/turtle.jpeg new file mode 100644 index 0000000..2a120c4 Binary files /dev/null and b/static/images/turtle.jpeg differ diff --git a/static/kaomoji.txt b/static/kaomoji.txt new file mode 100644 index 0000000..a91f35a --- /dev/null +++ b/static/kaomoji.txt @@ -0,0 +1 @@ +( ͡° ͜ʖ ͡°) (╯°□°)╯︵ ┻━┻ ༼ つ ◕_◕ ༽つ (☞゚ヮ゚)☞ ᕕ( ᐛ )ᕗ ლ(ಠ益ಠლ) (̿▀̿ ̿Ĺ̯̿̿▀̿ ̿) ლ,ᔑ•ﺪ͟͠•ᔐ. ᕦ(ò_óˇ) ¯\_(⊙︿⊙)_/¯ ლ(=ↀωↀ=)ლ ༼ ༎ຶ ෴ ༎ຶ༽ [̲̅$̲̅(̲̅ ͡° ͜ʖ ͡°̲̅)̲̅$̲̅] ( ͠≖ ͜ʖ͠≖) O(≧∇≦)O ≧(´▽`)≦ ༼ ºل͟º༼ ºل͟º༼ ºل͟º༼ ºل͟º ༽ºل͟º ༽ºل͟º ༽ºل͟º ༽ (∩ ͡° ͜ʖ ͡°)⊃━☆゚. * ・ 。゚, (╭☞´ิ∀´ิ)╭☞ \ No newline at end of file diff --git a/static/tictactoe/assets/index-B3qe7Ptg.css b/static/tictactoe/assets/index-B3qe7Ptg.css new file mode 100644 index 0000000..8768cb7 --- /dev/null +++ b/static/tictactoe/assets/index-B3qe7Ptg.css @@ -0,0 +1 @@ +@import"https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Offside&display=swap";:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}.card{padding:2em}#app{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}.boards-container.svelte-6ho771{margin:2rem auto;max-width:600px;padding:1rem}h2.svelte-6ho771{text-align:center;margin-bottom:1.5rem;font-family:Offside,sans-serif}.boards-list.svelte-6ho771{display:flex;flex-direction:column;gap:2rem}.board-item.svelte-6ho771{border:1px solid #ddd;border-radius:8px;padding:1rem;background-color:#f9f9f9}h3.svelte-6ho771{margin:0 0 .5rem;font-family:Offside,sans-serif}.timestamp.svelte-6ho771{font-size:.8rem;color:#666;margin-bottom:.5rem}.mini-grid.svelte-6ho771{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;margin:0 auto;width:120px;height:120px}.mini-cell.svelte-6ho771{display:flex;align-items:center;justify-content:center;background-color:#fff;border:1px solid #ccc;height:100%;font-size:1.2rem;font-weight:700}.loading.svelte-6ho771,.error.svelte-6ho771,.no-boards.svelte-6ho771{text-align:center;padding:2rem;border:1px solid #ddd;border-radius:8px;background-color:#f9f9f9}.error.svelte-6ho771{color:#d32f2f;border-color:#ffcdd2;background-color:#ffebee}button.svelte-6ho771{padding:.5rem 1rem;margin:1rem auto;display:block;background-color:linen;border-radius:4px;cursor:pointer;font-family:Offside,sans-serif}button.svelte-6ho771:disabled{opacity:.5;cursor:not-allowed}.refresh-button.svelte-6ho771{margin-top:1.5rem}.pagination-controls.svelte-6ho771{display:flex;justify-content:center;align-items:center;margin-top:1.5rem;gap:1rem}.pagination-button.svelte-6ho771{margin:0}.page-info.svelte-6ho771{font-family:Offside,sans-serif}.button.svelte-bp979g{border-radius:.25rem;background-color:linen;margin:.5rem auto;font-family:Offside,sans-serif}.grid.svelte-cydwkz{display:grid;grid-template-columns:repeat(3,1fr);gap:.25rem;margin:1.25rem auto}.cell.svelte-cydwkz{display:flex;align-items:center;justify-content:center;width:6.25rem;height:6.25rem;border:1px solid black;font-size:1.5rem;cursor:pointer}.winner.svelte-cydwkz{text-align:center;margin-top:1.25rem;font-size:1.25rem}.button.svelte-cydwkz{margin-left:auto;margin-right:auto;margin-top:1.25rem;display:block;border-radius:.25rem;background-color:linen;margin:.5rem auto;font-family:Offside,sans-serif;cursor:pointer;padding:.5rem 1rem}.disconnect.svelte-cydwkz{background-color:#fdd}.controls.svelte-cydwkz{display:flex;flex-direction:column;align-items:center;margin-top:1rem}.connection-controls.svelte-cydwkz{display:flex;gap:.5rem;align-items:center;margin-top:.5rem}.connection-status.svelte-cydwkz{color:green;margin-top:.5rem;font-size:.9rem}.container.svelte-1448p0d{display:flex;justify-content:center;align-items:center;margin-top:2.5rem}.text.svelte-1448p0d{font-family:Offside,sans-serif;font-size:1.875rem;font-weight:600} diff --git a/static/tictactoe/assets/index-CK5hwdVk.js b/static/tictactoe/assets/index-CK5hwdVk.js new file mode 100644 index 0000000..c00da29 --- /dev/null +++ b/static/tictactoe/assets/index-CK5hwdVk.js @@ -0,0 +1 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))l(n);new MutationObserver(n=>{for(const a of n)if(a.type==="childList")for(const i of a.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&l(i)}).observe(document,{childList:!0,subtree:!0});function r(n){const a={};return n.integrity&&(a.integrity=n.integrity),n.referrerPolicy&&(a.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?a.credentials="include":n.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function l(n){if(n.ep)return;n.ep=!0;const a=r(n);fetch(n.href,a)}})();const Pt=!1;var pt=Array.isArray,kr=Array.prototype.indexOf,ht=Array.from,xr=Object.defineProperty,xe=Object.getOwnPropertyDescriptor,Tr=Object.getOwnPropertyDescriptors,Nr=Object.prototype,Sr=Array.prototype,Wt=Object.getPrototypeOf;function Or(e){return e()}function ot(e){for(var t=0;tf(e))),t}function b(e,t){return E!==null&&!Z&&Ie()&&(E.f&(j|gt))!==0&&($===null||!$.includes(e))&&Br(),it(e,t)}function it(e,t){return e.equals(t)||(e.v,e.v=t,e.wv=fr(),Jt(e,ee),Ie()&&k!==null&&(k.f&I)!==0&&(k.f&(Q|Pe))===0&&(K===null?on([e]):K.push(e))),t}function Jt(e,t){var r=e.reactions;if(r!==null)for(var l=Ie(),n=r.length,a=0;a=N.v&&b(N,C+1)}It(i)}return!0},ownKeys(c){f(i);var u=Reflect.ownKeys(c).filter(o=>{var d=n.get(o);return d===void 0||d.v!==F});for(var[v,_]of n)_.v!==F&&!(v in c)&&u.push(v);return u},setPrototypeOf(){Mr()}})}function It(e,t=1){b(e,e.v+t)}var Rt,Kt,Xt;function Gr(){if(Rt===void 0){Rt=window;var e=Element.prototype,t=Node.prototype;Kt=xe(t,"firstChild").get,Xt=xe(t,"nextSibling").get,e.__click=void 0,e.__className="",e.__attributes=null,e.__styles=null,e.__e=void 0,Text.prototype.__t=void 0}}function kt(e=""){return document.createTextNode(e)}function $e(e){return Kt.call(e)}function Qe(e){return Xt.call(e)}function B(e,t){return $e(e)}function J(e,t){{var r=$e(e);return r instanceof Comment&&r.data===""?Qe(r):r}}function P(e,t=1,r=!1){let l=e;for(;t--;)l=Qe(l);return l}function Jr(e){e.textContent=""}function xt(e){var t=j|ee,r=E!==null&&(E.f&j)!==0?E:null;return k===null||r!==null&&(r.f&U)!==0?t|=U:k.f|=zt,{ctx:S,deps:null,effects:null,equals:Ht,f:t,fn:e,reactions:null,rv:0,v:null,wv:0,parent:r??k}}function Kr(e){const t=xt(e);return t.equals=jt,t}function Zt(e){var t=e.effects;if(t!==null){e.effects=null;for(var r=0;rnew Promise(l=>{r.outro?Ue(t,()=>{ue(t),l(void 0)}):(ue(t),l(void 0))})}function tr(e){return be(Vt,e,!1)}function rr(e){return be(Ae,e,!0)}function ae(e,t=[],r=xt){const l=t.map(r);return Tt(()=>e(...l.map(f)))}function Tt(e,t=0){return be(Ae|gt|t,e,!0)}function Ce(e,t=!0){return be(Ae|Q,e,!0,t)}function nr(e){var t=e.teardown;if(t!==null){const r=St,l=E;Ft(!0),se(null);try{t.call(null)}finally{Ft(r),se(l)}}}function lr(e,t=!1){var r=e.first;for(e.first=e.last=null;r!==null;){var l=r.next;ue(r,t),r=l}}function nn(e){for(var t=e.first;t!==null;){var r=t.next;(t.f&Q)===0&&ue(t),t=r}}function ue(e,t=!0){var r=!1;if((t||(e.f&Ar)!==0)&&e.nodes_start!==null){for(var l=e.nodes_start,n=e.nodes_end;l!==null;){var a=l===n?null:Qe(l);l.remove(),l=a}r=!0}lr(e,t&&!r),Xe(e,0),Y(e,Ze);var i=e.transitions;if(i!==null)for(const c of i)c.stop();nr(e);var s=e.parent;s!==null&&s.first!==null&&ar(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes_start=e.nodes_end=null}function ar(e){var t=e.parent,r=e.prev,l=e.next;r!==null&&(r.next=l),l!==null&&(l.prev=r),t!==null&&(t.first===e&&(t.first=l),t.last===e&&(t.last=r))}function Ue(e,t){var r=[];Nt(e,r,!0),or(r,()=>{ue(e),t&&t()})}function or(e,t){var r=e.length;if(r>0){var l=()=>--r||t();for(var n of e)n.out(l)}else t()}function Nt(e,t,r){if((e.f&X)===0){if(e.f^=X,e.transitions!==null)for(const i of e.transitions)(i.is_global||r)&&t.push(i);for(var l=e.first;l!==null;){var n=l.next,a=(l.f&mt)!==0||(l.f&Q)!==0;Nt(l,t,a?r:!1),l=n}}}function Ye(e){ir(e,!0)}function ir(e,t){if((e.f&X)!==0){e.f^=X,(e.f&I)===0&&(e.f^=I),Re(e)&&(Y(e,ee),tt(e));for(var r=e.first;r!==null;){var l=r.next,n=(r.f&mt)!==0||(r.f&Q)!==0;ir(r,n?t:!1),r=l}if(e.transitions!==null)for(const a of e.transitions)(a.is_global||t)&&a.in()}}let st=!1,ft=[];function ln(){st=!1;const e=ft.slice();ft=[],ot(e)}function ur(e){st||(st=!0,queueMicrotask(ln)),ft.push(e)}let Ve=!1,Ge=!1,Je=null,ge=!1,St=!1;function Lt(e){ge=e}function Ft(e){St=e}let ct=[],Ne=0;let E=null,Z=!1;function se(e){E=e}let k=null;function fe(e){k=e}let $=null;function an(e){$=e}let D=null,M=0,K=null;function on(e){K=e}let sr=1,Ke=0,ie=!1;function fr(){return++sr}function Re(e){var u;var t=e.f;if((t&ee)!==0)return!0;if((t&me)!==0){var r=e.deps,l=(t&U)!==0;if(r!==null){var n,a,i=(t&je)!==0,s=l&&k!==null&&!ie,c=r.length;if(i||s){for(n=0;ne.wv)return!0}(!l||k!==null&&!ie)&&Y(e,I)}return!1}function un(e,t){for(var r=t;r!==null;){if((r.f&He)!==0)try{r.fn(e);return}catch{r.f^=He}r=r.parent}throw Ve=!1,e}function sn(e){return(e.f&Ze)===0&&(e.parent===null||(e.parent.f&He)===0)}function et(e,t,r,l){if(Ve){if(r===null&&(Ve=!1),sn(t))throw e;return}r!==null&&(Ve=!0);{un(e,t);return}}function cr(e,t,r=0){var l=e.reactions;if(l!==null)for(var n=0;n0)for(_.length=M+D.length,o=0;o1e3){Ne=0;try{Lr()}catch(e){if(Je!==null)et(e,Je,null);else throw e}}Ne++}function vn(e){var t=e.length;if(t!==0){cn();var r=ge;ge=!0;try{for(var l=0;l1001)return;const e=ct;ct=[],vn(e),Ge||(Ne=0,Je=null)}function tt(e){Ge||(Ge=!0,queueMicrotask(dn)),Je=e;for(var t=e;t.parent!==null;){t=t.parent;var r=t.f;if((r&(Pe|Q))!==0){if((r&I)===0)return;t.f^=I}}ct.push(t)}function _r(e,t){var r=e.first,l=[];e:for(;r!==null;){var n=r.f,a=(n&Q)!==0,i=a&&(n&I)!==0,s=r.next;if(!i&&(n&X)===0)if((n&Ae)!==0){if(a)r.f^=I;else{var c=E;try{E=r,Re(r)&&Ot(r)}catch(o){et(o,r,null,r.ctx)}finally{E=c}}var u=r.first;if(u!==null){r=u;continue}}else(n&Vt)!==0&&l.push(r);if(s===null){let o=r.parent;for(;o!==null;){if(e===o)break e;var v=o.next;if(v!==null){r=v;continue e}o=o.parent}}r=s}for(var _=0;_{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const r of e.target.elements)(t=r.__on_r)==null||t.call(r)})},{capture:!0}))}function dr(e){var t=E,r=k;se(null),fe(null);try{return e()}finally{se(t),fe(r)}}function yn(e,t,r,l=r){e.addEventListener(t,()=>dr(r));const n=e.__on_r;n?e.__on_r=()=>{n(),l(!0)}:e.__on_r=()=>l(!0),bn()}const pr=new Set,_t=new Set;function wn(e,t,r,l={}){function n(a){if(l.capture||ke.call(t,a),!a.cancelBubble)return dr(()=>r==null?void 0:r.call(this,a))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?ur(()=>{t.addEventListener(e,n,l)}):t.addEventListener(e,n,l),n}function pe(e,t,r,l,n){var a={capture:l,passive:n},i=wn(e,t,r,a);(t===document.body||t===window||t===document)&&en(()=>{t.removeEventListener(e,i,a)})}function hr(e){for(var t=0;t{throw O});throw o}}finally{e.__root=t,delete e.currentTarget,se(v),fe(_)}}}function En(e){var t=document.createElement("template");return t.innerHTML=e,t.content}function dt(e,t){var r=k;r.nodes_start===null&&(r.nodes_start=e,r.nodes_end=t)}function R(e,t){var r=(t&jr)!==0,l=(t&$r)!==0,n,a=!e.startsWith("");return()=>{n===void 0&&(n=En(a?e:""+e),r||(n=$e(n)));var i=l?document.importNode(n,!0):n.cloneNode(!0);if(r){var s=$e(i),c=i.lastChild;dt(s,c)}else dt(i,i);return i}}function ze(){var e=document.createDocumentFragment(),t=document.createComment(""),r=kt();return e.append(t,r),dt(t,r),e}function A(e,t){e!==null&&e.before(t)}function oe(e,t){var r=t==null?"":typeof t=="object"?t+"":t;r!==(e.__t??(e.__t=e.nodeValue))&&(e.__t=r,e.nodeValue=r+"")}function kn(e,t){return xn(e,t)}const he=new Map;function xn(e,{target:t,anchor:r,props:l={},events:n,context:a,intro:i=!0}){Gr();var s=new Set,c=_=>{for(var o=0;o<_.length;o++){var d=_[o];if(!s.has(d)){s.add(d);var p=mn(d);t.addEventListener(d,ke,{passive:p});var y=he.get(d);y===void 0?(document.addEventListener(d,ke,{passive:p}),he.set(d,1)):he.set(d,y+1)}}};c(ht(pr)),_t.add(c);var u=void 0,v=rn(()=>{var _=r??t.appendChild(kt());return Ce(()=>{if(a){wt({});var o=S;o.c=a}n&&(l.$$events=n),u=e(_,l)||{},a&&Et()}),()=>{var p;for(var o of s){t.removeEventListener(o,ke);var d=he.get(o);--d===0?(document.removeEventListener(o,ke),he.delete(o)):he.set(o,d)}_t.delete(c),_!==r&&((p=_.parentNode)==null||p.removeChild(_))}});return Tn.set(u,v),u}let Tn=new WeakMap;function de(e,t,r=!1){var l=e,n=null,a=null,i=F,s=r?mt:0,c=!1;const u=(_,o=!0)=>{c=!0,v(o,_)},v=(_,o)=>{i!==(i=_)&&(i?(n?Ye(n):o&&(n=Ce(()=>o(l))),a&&Ue(a,()=>{a=null})):(a?Ye(a):o&&(a=Ce(()=>o(l))),n&&Ue(n,()=>{n=null})))};Tt(()=>{c=!1,t(u),c||v(null,null)},s)}function Se(e,t){return t}function Nn(e,t,r,l){for(var n=[],a=t.length,i=0;i0&&n.length===0&&r!==null;if(s){var c=r.parentNode;Jr(c),c.append(r),l.clear(),ne(e,t[0].prev,t[a-1].next)}or(n,()=>{for(var u=0;u{var d=r();return pt(d)?d:d==null?[]:ht(d)});Tt(()=>{var d=f(o),p=d.length;_&&p===0||(_=p===0,Sn(d,s,i,n,t,l,r),a!==null&&(p===0?v?Ye(v):v=Ce(()=>a(i)):v!==null&&Ue(v,()=>{v=null})),f(o))})}function Sn(e,t,r,l,n,a,i){var h,T,ce,ve;var s=(n&zr)!==0,c=(n&(bt|yt))!==0,u=e.length,v=t.items,_=t.first,o=_,d,p=null,y,x=[],N=[],C,O,g,w;if(s)for(w=0;w0){var m=(n&$t)!==0&&u===0?r:null;if(s){for(w=0;w{var re;if(y!==void 0)for(g of y)(re=g.a)==null||re.apply()}),k.first=t.first&&t.first.e,k.last=p&&p.e}function On(e,t,r,l){(l&bt)!==0&&it(e.v,t),(l&yt)!==0?it(e.i,r):e.i=r}function Cn(e,t,r,l,n,a,i,s,c,u){var v=(c&bt)!==0,_=(c&Hr)===0,o=v?_?Yt(n):q(n):n,d=(c&yt)===0?i:q(i),p={i:d,v:o,k:a,a:null,e:null,prev:r,next:l};try{return p.e=Ce(()=>s(e,o,d,u),Yr),p.e.prev=r&&r.e,p.e.next=l&&l.e,r===null?t.first=p:(r.next=p,r.e.next=p.e),l!==null&&(l.prev=p,l.e.prev=p.e),p}finally{}}function qt(e,t,r){for(var l=e.next?e.next.e.nodes_start:r,n=t?t.e.nodes_start:r,a=e.e.nodes_start;a!==l;){var i=Qe(a);n.before(a),a=i}}function ne(e,t,r){t===null?e.first=r:(t.next=r,t.e.next=r&&r.e),r!==null&&(r.prev=t,r.e.prev=t&&t.e)}function An(e,t,r=t){var l=Ie();yn(e,"input",n=>{var a=n?e.defaultValue:e.value;if(a=lt(e)?at(a):a,r(a),l&&a!==(a=t())){var i=e.selectionStart,s=e.selectionEnd;e.value=a??"",s!==null&&(e.selectionStart=i,e.selectionEnd=Math.min(s,e.value.length))}}),Le(t)==null&&e.value&&r(lt(e)?at(e.value):e.value),rr(()=>{var n=t();lt(e)&&n===at(e.value)||e.type==="date"&&!n&&!e.value||n!==e.value&&(e.value=n??"")})}function lt(e){var t=e.type;return t==="number"||t==="range"}function at(e){return e===""?null:+e}function Pn(e=!1){const t=S,r=t.l.u;if(!r)return;let l=()=>hn(t.s);if(e){let n=0,a={};const i=xt(()=>{let s=!1;const c=t.s;for(const u in c)c[u]!==a[u]&&(a[u]=c[u],s=!0);return s&&n++,n});l=()=>f(i)}r.b.length&&tn(()=>{Bt(t,l),ot(r.b)}),ut(()=>{const n=Le(()=>r.m.map(Or));return()=>{for(const a of n)typeof a=="function"&&a()}}),r.a.length&&ut(()=>{Bt(t,l),ot(r.a)})}function Bt(e,t){if(e.l.s)for(const r of e.l.s)f(r);t()}function gr(e){S===null&&Ut(),De&&S.l!==null?In(S).m.push(e):ut(()=>{const t=Le(e);if(typeof t=="function")return t})}function Dn(e){S===null&&Ut(),gr(()=>()=>Le(e))}function In(e){var t=e.l;return t.u??(t.u={a:[],b:[],m:[]})}const Rn="5";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Rn);Vr();function Ln(e,t,r,l,n){f(t)*r1&&(b(t,f(t)-1),r())}var Mn=R('
Loading recent games...
'),qn=R('
',1),Bn=R('
No games found
',1),Wn=R('
'),Vn=R('
'),zn=R('

'),Hn=R('
',1),jn=R('

Recent Games

');function $n(e,t){wt(t,!0);let r=Ee(le([])),l=Ee(!0),n=Ee(null),a=Ee(0),i=[],s=Ee(1);const c=5;async function u(){try{b(l,!0),b(n,null),i=(await(await fetch("https://api.taranathan.com/boards")).json()).rows.map(N=>({id:N.id.toString(),board:N.board,timestamp:N.date})),i.sort((N,C)=>{const O=N.timestamp?new Date(N.timestamp).getTime():0;return(C.timestamp?new Date(C.timestamp).getTime():0)-O}),b(a,le(i.length)),console.log("totalBoards:",f(a)),v(),b(n,null)}catch(y){console.error("Error fetching boards:",y),b(n,"Failed to fetch boards. Please try again later.")}finally{b(l,!1)}}function v(){b(r,le(i.slice((f(s)-1)*c,f(s)*c)))}gr(u);var _=jn(),o=P(B(_),2);{var d=y=>{var x=Mn();A(y,x)},p=y=>{var x=ze(),N=J(x);{var C=g=>{var w=qn(),G=J(w),V=B(G),L=P(G,2);L.__click=u,ae(()=>oe(V,`Error: ${f(n)??""}`)),A(g,w)},O=g=>{var w=ze(),G=J(w);{var V=z=>{var H=Bn(),W=P(J(H),2);W.__click=u,A(z,H)},L=z=>{var H=Hn(),W=J(H);W.__click=u;var te=P(W,2);Oe(te,21,()=>f(r),Se,(re,ye,Fe)=>{var _e=zn(),Me=B(_e),rt=B(Me),Ct=P(Me,2);{var mr=we=>{var qe=Wn(),Be=B(qe);ae(nt=>oe(Be,nt),[()=>new Date(f(ye).timestamp).toLocaleString()]),A(we,qe)};de(Ct,we=>{f(ye).timestamp&&we(mr)})}var br=P(Ct,2);Oe(br,21,()=>f(ye).board,Se,(we,qe)=>{var Be=ze(),nt=J(Be);Oe(nt,17,()=>f(qe),Se,(yr,wr)=>{var At=Vn(),Er=B(At);ae(()=>oe(Er,f(wr)||" ")),A(yr,At)}),A(we,Be)}),ae(()=>oe(rt,`Game ${(f(s)-1)*c+Fe+1}`)),A(re,_e)});var m=P(te,2),h=B(m);h.__click=[Fn,s,v];var T=P(h,2),ce=B(T),ve=P(T,2);ve.__click=[Ln,s,c,a,v],ae(re=>{h.disabled=f(s)===1,oe(ce,`Page ${f(s)??""} of ${re??""}`),ve.disabled=f(s)*c>=f(a)},[()=>Math.ceil(f(a)/c)]),A(z,H)};de(G,z=>{f(r).length===0?z(V):z(L,!1)},!0)}A(g,w)};de(N,g=>{f(n)?g(C):g(O,!1)},!0)}A(y,x)};de(o,y=>{f(l)?y(d):y(p,!1)})}A(e,_),Et()}hr(["click"]);hr(["click"]);var Un=R('
'),Yn=R('
'),Gn=R(''),Jn=R(''),Kn=R('
'),Xn=R('
',1);function Zn(e,t){wt(t,!1);let r=We([["","",""],["","",""],["","",""]]),l="X",n=We(null),a=!1,i=We(""),s=null,c=We(!1);function u(){for(let h=0;h<3;h++)if(f(r)[h][0]!==""&&f(r)[h][0]===f(r)[h][1]&&f(r)[h][0]===f(r)[h][2])return b(n,f(r)[h][0]),!0;for(let h=0;h<3;h++)if(f(r)[0][h]!==""&&f(r)[0][h]===f(r)[1][h]&&f(r)[0][h]===f(r)[2][h])return b(n,f(r)[0][h]),!0;if(f(r)[0][0]!==""&&f(r)[0][0]===f(r)[1][1]&&f(r)[0][0]===f(r)[2][2])return b(n,f(r)[0][0]),!0;if(f(r)[0][2]!==""&&f(r)[0][2]===f(r)[1][1]&&f(r)[0][2]===f(r)[2][0])return b(n,f(r)[0][2]),!0;let m=!0;for(let h=0;h<3;h++){for(let T=0;T<3;T++)if(f(r)[h][T]===""){m=!1;break}if(!m)break}return m?(b(n,"Tie"),!0):!1}function v(m,h){if(!(f(r)[m][h]!==""||a)){if(Ur(r,f(r)[m][h]=l),b(r,[...f(r)]),s&&s.readyState===WebSocket.OPEN&&s&&s.send(JSON.stringify({type:"update_board",boardId:parseInt(f(i)),board:f(r)})),u()){a=!0;return}l=l==="X"?"O":"X"}}function _(){b(r,[["","",""],["","",""],["","",""]]),l="X",b(n,null),a=!1,s&&s.readyState===WebSocket.OPEN&&f(i)&&s.send(JSON.stringify({type:"update_board",boardId:parseInt(f(i)),board:f(r)}))}async function o(){await fetch("https://api.taranathan.com/boards",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({board:f(r)})})}function d(){s&&(s.close(),s=null,b(c,!1))}async function p(){s&&d();try{const m=parseInt(f(i));if(isNaN(m)){alert("Please enter a valid board ID");return}s=new WebSocket(`http://api.taranathan.com/ws/board/${m}`),s.onopen=()=>{console.log("Connected to WebSocket"),b(c,!0),s&&s.send(JSON.stringify({type:"get_board",boardId:m}))},s.onmessage=h=>{const T=JSON.parse(h.data);console.log("Received message:",T),T.type==="board_data"&&T.data&&T.data.length>0?b(r,T.data[0].board):T.type==="board_updated"&&T.data&&T.data.length>0&&(b(r,T.data[0].board),u()&&(a=!0))},s.onerror=h=>{console.error("WebSocket error:",h),alert("Error connecting to game"),b(c,!1)},s.onclose=()=>{console.log("WebSocket connection closed"),b(c,!1)}}catch(m){console.error("Connection error:",m),alert("Failed to connect to game")}}Dn(()=>{s&&s.close()}),Pn();var y=Xn(),x=J(y);Oe(x,5,()=>f(r),Se,(m,h,T)=>{var ce=ze(),ve=J(ce);Oe(ve,1,()=>f(h),Se,(re,ye,Fe)=>{var _e=Un(),Me=B(_e);ae(()=>oe(Me,f(ye))),pe("click",_e,()=>v(T,Fe)),pe("keydown",_e,rt=>rt.key==="Enter"&&v(T,Fe)),A(re,_e)}),A(m,ce)});var N=P(x,2);{var C=m=>{var h=Yn(),T=B(h);ae(()=>oe(T,`Winner: ${f(n)??""}`)),A(m,h)};de(N,m=>{f(n)&&m(C)})}var O=P(N,2),g=B(O),w=P(g,2),G=P(w,2),V=B(G),L=P(V,2);{var z=m=>{var h=Gn();pe("click",h,()=>p()),A(m,h)},H=m=>{var h=Jn();pe("click",h,()=>d()),A(m,h)};de(L,m=>{f(c)?m(H,!1):m(z)})}var W=P(G,2);{var te=m=>{var h=Kn(),T=B(h);ae(()=>oe(T,`Connected to game ${f(i)??""}`)),A(m,h)};de(W,m=>{f(c)&&m(te)})}pe("click",g,()=>_()),pe("click",w,()=>o()),An(V,()=>f(i),m=>b(i,m)),A(e,y),Et()}var Qn=R('

Have Fun!

',1);function el(e){var t=Qn(),r=P(J(t),2);Zn(r,{});var l=P(r,2);$n(l,{}),A(e,t)}kn(el,{target:document.getElementById("app")}); diff --git a/static/tictactoe/index.html b/static/tictactoe/index.html new file mode 100644 index 0000000..3b28e9d --- /dev/null +++ b/static/tictactoe/index.html @@ -0,0 +1,13 @@ + + + + + + TicTacToe! + + + + +
+ + diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..19e9b28 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,17 @@ + + + + + + MyBlog + + + +
+
+ {% block content %} {% endblock content %} +
+
+ + + diff --git a/templates/blog-page.html b/templates/blog-page.html new file mode 100644 index 0000000..f0f638e --- /dev/null +++ b/templates/blog-page.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} + +{% block content %} +

+ {{ page.title }} +

+

{{ page.date }}

+{{ page.content | safe }} +{% endblock content %} diff --git a/templates/blog.html b/templates/blog.html new file mode 100644 index 0000000..2529646 --- /dev/null +++ b/templates/blog.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block content %} +

+ {{ section.title }} +

+ +{% endblock content %} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..2518a13 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,113 @@ + + + + + + moo + + + + + +
+
+
+
+ +
+
+

Welcome to
this webpage...

+ +
+ +
+

About Me

+

Hello! I like 'pooters and cats.

+
+ +
+
+

Recent Project

+

Look! I made a cute little lizard

+
+ 2D computer animated lizard and snake +
+
+

ᕙ( •̀ ᗜ •́ )ᕗ

+
+
+
+ +
+

More

+

If you're here, you know me irl or are just wierd. Either way, what you lookin + at? 🤨 +

also, this website is open source, so visit the github repo here: +

+ link +
+ +
+ +
+
+
+ + +
+ + + + + + diff --git a/templates/main-page.html b/templates/main-page.html new file mode 100644 index 0000000..775e502 --- /dev/null +++ b/templates/main-page.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} + +

+wassup +

diff --git a/templates/miniblog-page.html b/templates/miniblog-page.html new file mode 100644 index 0000000..f0f638e --- /dev/null +++ b/templates/miniblog-page.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} + +{% block content %} +

+ {{ page.title }} +

+

{{ page.date }}

+{{ page.content | safe }} +{% endblock content %} diff --git a/zola.toml b/zola.toml new file mode 100644 index 0000000..62feacc --- /dev/null +++ b/zola.toml @@ -0,0 +1,31 @@ +# The URL the site will be built for +base_url = "https://taranathan.com" + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = false + +default_language = "en" + +author = "Taran Nathan" + + +[markdown] +smart_punctuation = true +bottom_footnotes = true +github_alerts = true + +[markdown.highlighting] +theme = "catppuccin-mocha" + +[search] +include_title = true +include_description = true +include_date = true +include_content = true +include_path = true + +[extra] +# Put all your custom variables here