From 21e4063af27a400bf6058c20a4fbf10ea7369826 Mon Sep 17 00:00:00 2001 From: Vlad Faust Date: Wed, 6 Apr 2022 13:54:44 +0300 Subject: [PATCH] Add projects, CV, remove notes --- _includes/footer.pug | 2 +- _includes/head.pug | 2 +- _includes/header.pug | 16 +- _includes/posts.pug | 5 + _includes/projects.pug | 357 ++++++++++++++++++++++ cv.pug | 38 +++ index.pug | 26 +- notes/.gitignore | 2 - notes/2020-09-11-exporting-from-onyx.adoc | 143 --------- notes/notes.json | 4 - public/img/projects/jumpin_sweeties.png | Bin 0 -> 50706 bytes public/styles/common.css | 27 ++ public/styles/cv.css | 15 + public/styles/index.css | 42 --- public/styles/post.css | 67 ++-- public/styles/posts.css | 30 ++ public/styles/projects.css | 77 +++++ 17 files changed, 606 insertions(+), 247 deletions(-) create mode 100644 _includes/posts.pug create mode 100644 _includes/projects.pug create mode 100644 cv.pug delete mode 100644 notes/.gitignore delete mode 100644 notes/2020-09-11-exporting-from-onyx.adoc delete mode 100644 notes/notes.json create mode 100644 public/img/projects/jumpin_sweeties.png create mode 100644 public/styles/cv.css create mode 100644 public/styles/posts.css create mode 100644 public/styles/projects.css diff --git a/_includes/footer.pug b/_includes/footer.pug index cbb439a..7e43bea 100644 --- a/_includes/footer.pug +++ b/_includes/footer.pug @@ -1,2 +1,2 @@ footer - p Vlad Faust © 2020 + p Vlad Faust © 1996-present diff --git a/_includes/head.pug b/_includes/head.pug index ccb3fcf..c234857 100644 --- a/_includes/head.pug +++ b/_includes/head.pug @@ -3,7 +3,7 @@ meta(charset='UTF-8') meta(name='viewport', content='width=device-width, initial-scale=1.0') -title= title ? (titleNoAppend ? title : (title + " | Vlad Faust Blog")) : "Vlad Faust Blog" +title= title ? (titleNoAppend ? title : (title + " - Vlad Faust Blog")) : "Vlad Faust Blog" meta(name='description', content=description || excerpt) meta(name='robots' content="index,follow") meta(name='generator' content='Eleventy') diff --git a/_includes/header.pug b/_includes/header.pug index 3fdf0a5..5c301f7 100644 --- a/_includes/header.pug +++ b/_includes/header.pug @@ -4,15 +4,19 @@ header div.text p | Hello, my name is  - a(href='/') Vlad Faust + a(href='/') Vladislav Faust | . p.tablet-hide - | I'm a passionate developer currently working on  - a(href='/posts/2020-08-20-the-onyx-programming-language') my own programming language + | I am a jack of anything IT, master of some; see my  + a(href='/cv') CV | . p.tablet-hide - | You can follow me on  + | You can contact me via  a(href='https://twitter.com/vladfaust') Twitter - | and  + | ,  a(href='https://github.com/vladfaust') GitHub - | and also send nudes to mail at vladfaust.com + | or  + a(href='https://t.me/vladfaust') Telegram + | , or even e-mail me directly at  + i hey at vladfaust.com + | . diff --git a/_includes/posts.pug b/_includes/posts.pug new file mode 100644 index 0000000..6d62753 --- /dev/null +++ b/_includes/posts.pug @@ -0,0 +1,5 @@ +ul.posts + each post in [...collections.post].reverse().filter((post) => !post.data.hidden && post.date <= Date.now()) + li + span.date= post.date.toDateString() + a.title(href=post.url)= post.data.title diff --git a/_includes/projects.pug b/_includes/projects.pug new file mode 100644 index 0000000..933b471 --- /dev/null +++ b/_includes/projects.pug @@ -0,0 +1,357 @@ +h3 Onyx, the language (2020-present) +small.annotation + | Onyx is a novel programming language I'm working on. + +ul.projects + li.project-card + a.title(href="https://nxsf.org") NXSF.org + p.desc + | The Onyx Software Foundation website ( + a(href="https://github.com/nxsf/nxsf.github.io") source + | ). + div.stack + span Open source + + li.project-card + a.title(href="https://nxsf.org/onyx/") Onyx standard + p.desc + | An ongoing attempt to standardize the Onyx language ( + a(href="https://github.com/nxsf/onyx") source + | ). + div.stack + span Open source + + li.project-card + a.title(href="https://ref.nx.fancysoft.xyz/") Onyx reference + p.desc + | An easier-to-understand Onyx language introduction ( + a(href="https://github.com/fancysofthq/onyx-ref") source + | ). + div.stack + span Open source + + li.project-card + a.title(href="https://github.com/onyxlang/onyx") Onyx implementation + p.desc An ongoing attempt to implement an Onyx language compiler. + div.stack + span Open source + span C++ + span LLVM + span Zig + span Typescript + +h3 Crystal-related projects (2018-2020) +small.annotation + a(href="https://crystal-lang.org") Crystal + | is a Ruby-inspired programming language, but compiled. + +ul.projects + li.project-card + span.title + a(href="https://onyxframework.com/") Onyx framework + | (2020) + p.desc + | A web framework with  + a(href="https://github.com/onyxframework/http") HTTP + | ,  + a(href="https://github.com/onyxframework/sql") SQL ORM + | and  + a(href="https://github.com/onyxframework/eda") EDA + | modules, fancy website and rich documentation. + div.stack + span Open source + span Product design + span Crystal + span SQL + span HTTP + span Event-driven architecture + span VueJS + span SASS + + li.project-card + span.title + a(href="https://github.com/crystaljobs") Crystal Jobs + | (2018) + p.desc + | A now defunct Crystal jobs board ( + a(href="https://crystaljobs-staging.netlify.app/") frontend preview + | ). + div.stack + span Open source + span Product design + span Crystal + span VueJS + span SASS + + li.project-card + span.title + a(href="https://github.com/vladfaust/crystalworld") CrystalWorld + | (2019) + p.desc + | A  + a(href="https://github.com/gothinkster/realworld") RealWorld + | implementation in Crystal and Onyx the web framework. + div.stack + span Open source + span Crystal + span SQLite + +h4 Crystal shards (2018-2020) +small.annotation + | A  + i shard + | is a Crystal code package. + +ul.projects + li.project-card + a.title(href="https://github.com/vladfaust/time_format.cr") TimeFormat + p.desc Time spans formatting made simple. + div.stack + span Open source + span Crystal + + li.project-card + a.title(href="https://github.com/vladfaust/i18n.cr") I18n + p.desc Internationalization shard. + div.stack + span Open source + span Crystal + + li.project-card + a.title(href="https://github.com/vladfaust/http-multiserver.cr") HTTP::Multiserver + p.desc Mount multiple web applications. + div.stack + span Open source + span Crystal + span HTTP + + li.project-card + a.title(href="https://github.com/vladfaust/tarantool.cr") Tarantool + p.desc + | A  + a(href="https://www.tarantool.io/ru/") Tarantool + | database driver. + div.stack + span Open source + span Crystal + span TCP + + li.project-card + a.title(href="https://github.com/vladfaust/cake-bake") Cake-Bake + p.desc Bake Cakefile into native Crystal code. + div.stack + span Open source + span Crystal + + li.project-card + a.title(href="https://github.com/vladfaust/callbacks.cr") Callbacks + p.desc Expressive callbacks module. + div.stack + span Open source + span Crystal + + li.project-card + a.title(href="https://github.com/vladfaust/validations.cr") Validations + p.desc Validations module. + div.stack + span Open source + span Crystal + + li.project-card + a.title(href="https://github.com/vladfaust/mini_redis") MiniRedis + p.desc A light-weight low-level Redis client. + div.stack + span Open source + span Crystal + span TCP + + li.project-card + a.title(href="https://github.com/vladfaust/http-params-serializable") HTTP::Params::Serializable + p.desc The HTTP params parsing module. + div.stack + span Open source + span Crystal + + li.project-card + a.title(href="https://github.com/vladfaust/migrate.cr") Migrate + p.desc A database migration solution. + div.stack + span Open source + span Crystal + span SQL + + li.project-card + a.title(href="https://github.com/vladfaust/stripe.cr") Stripe + p.desc Stripe API wrapper. + div.stack + span Open source + span Crystal + span API wrapper + + li.project-card + a.title(href="https://github.com/vladfaust/tele.cr") Tele + p.desc A convenient Telegram Bot framework. + div.stack + span Open source + span Crystal + span Telegram bot + + li.project-card + a.title(href="https://github.com/vladfaust/tele-broadcast.cr") Tele::Broadcast + p.desc Broadcasting for Tele. + div.stack + span Open source + span Crystal + span Telegram bot + span Redis + +h3 Ruby gems (2015-2017) +ul.projects + li.project-card + a.title(href="https://github.com/vladfaust/jbuilder-json_api") Jbuilder::JsonApi + p.desc Jbuilder meets jsonapi.org specifications. + div.stack + span Open source + span Ruby + + li.project-card + a.title(href="https://github.com/vladfaust/asset_pipeline") AssetPipeline + p.desc Add Sprockets based Asset Pipeline to your Ruby applications. + div.stack + span Open source + span Ruby on Rails + + li.project-card + a.title(href="https://github.com/vladfaust/bitcoinpay-client") Bitcoinpay + p.desc Bitcoinpay.com API client for Ruby. + div.stack + span Open source + span Ruby + span API wrapper + span Crypto + + li.project-card + a.title(href="https://github.com/vladfaust/blockchain-api") Blockchain::Api + p.desc A blockchain.info API wrapper. + div.stack + span Open source + span Ruby + span API wrapper + span Crypto + +h3 Other projects +ul.projects + li.project-card(style="background-image:url(/public/img/projects/jumpin_sweeties.png); background-repeat: no-repeat; background-position-x: calc(100% + 5rem); background-size: 15rem;") + span.title + a(href="https://xgm.guru/p/sweeties") Jumpin Sweeties + | (2015) + p.desc A casual mobile game. + div.stack + span GameDev + span Java + span LibGDX + + li.project-card + span.title + a(href="https://parrotfarm.herokuapp.com/") Parrot Farm + | (2016) + p.desc + | A showcase project to demonstrate my skills at those times + small , hosted on Heroku. + div.stack + span Open source + span Ruby on Rails + span AngularJS + + li.project-card + span.title + a(href="https://nostalgic-hopper-8a1414.netlify.app/") Coinpricebet + | (2018) + p.desc + | A Stellar-based betting on crypto coin prices, also  + a(href="https://loving-mahavira-537556.netlify.app/") this + | version. + div.stack + span Product design + span Crypto + span VueJS + + li.project-card + span.title + a(href="https://heuristic-wozniak-28f7b6.netlify.app/") AssetFD + | (2018) + p.desc An unfinished decentralized exchange interface based on Stellar. + div.stack + span Crypto + span VueJS + + li.project-card + span.title + a(href="https://github.com/soundmemes") Soundmemes Bot + | (2016-2018) + p.desc A now defunct Telegram bot to post sound memes in chats. + div.stack + span Open source + span Product design + span Telegram bot + span Ruby + span Crystal + span PostgreSQL + span Redis + + li.project-card + span.title + a(href="https://telegra.ph/CashbackBot-09-16") Cashback Bot + | (2017) + p.desc A now defunct Telegram bot to earn cashback from purchases. + div.stack + span Product design + span Telegram bot + span Ruby + span GraphQL + span API wrapper + span PostgreSQL + span Redis + + li.project-card + span.title + a(href="https://www.dropbox.com/sh/wpqjtnw0avw6278/AAC55zKcrbVzFmL12xIT4rK2a?dl=0") Expense Manager 2 + | (2015) + p.desc A collaborative attempt to improve an existing app. + div.stack + span Product design + span Java + span Android + + li.project-card + span.title + a(href="https://www.dropbox.com/sh/0heutamg923ohx5/AADmFkWh06vkM3wDsR0P6g_ha?dl=0") Cycler + | (2014) + p.desc An attempt to create a sleep cycle Android application. + div.stack + span Product design + span Java + span Android + + li.project-card + span.title + a(href="https://www.dropbox.com/s/xc8kjswj4fb0m0z/presentation.pdf?dl=0") Anogram + | (2014) + p.desc A naive attempt to create an anonymous social network. + div.stack + span Product design + span iOS + span PHP + + li.project-card + span.title + a(href="https://xgm.guru/p/ufs/index") UFS Arena + | (2012) + p.desc + | A Warcraft III™ custom map ( + a(href="https://www.dropbox.com/s/odxeaq62jaqvcdc/UFS.w3x?dl=0") source + | ). + dev.stack + span Product design + span GameDev + span cJASS diff --git a/cv.pug b/cv.pug new file mode 100644 index 0000000..ac6fea9 --- /dev/null +++ b/cv.pug @@ -0,0 +1,38 @@ +--- +eleventyExcludeFromCollections: true +title: "CV" +description: "Curriculum vitae" +cover: /public/img/me.jpg +--- + +doctype html +html(lang='en') + head + include /head.pug + + //- Styles + link(rel='stylesheet' href='/public/styles/cv.css') + link(rel='stylesheet' href='/public/styles/posts.css') + link(rel='stylesheet' href='/public/styles/projects.css') + body + include /header.pug + + main + section#about + h2 Curriculum vitae + p Throughout my 10+ years of experience in Information Technology, I've tried everything from compiling COFF after LLVM lowering to designing a resilient ultra-scalable fleet of FAAS workers. Everything from Substrate and IPFS to event-driven stock price prediction. + p Once a technology is understood by me, it becomes boring. It is like surfing on the waves of technology trends, on the surface of the greatest whirlpool of singularity. By understanding I mean not entirely known, e.g. all quirks of the hell-born Rust code, no. Understanding means fundamental, decomposed knowledge enough to build a solution at any scale. + p For me, it is not about thoroughly learning API of yet another web framework, it is instead getting hands on the set of tooling a technology offers, so that I may choose the best framework suitable for the problem. If I were to compile my 10+ years of experience into one line, that would be the following: + big Right tooling is paramount. + p In the very end what I really want is to exercise human love at its fullness. No technology brings me closer to that desire. My extra-wide experience does, though. I am currently available for short-term projects and/or consultancy services; almost any stack. Find my contacts in the header. + p Sincerely,
Vlad. + + section#posts + h2 Recent blog posts + include /posts.pug + + section#projects + h2 Project list + include /projects.pug + + include /footer.pug diff --git a/index.pug b/index.pug index cc763dc..169fa01 100644 --- a/index.pug +++ b/index.pug @@ -1,8 +1,8 @@ --- eleventyExcludeFromCollections: true -title: "Vlad Faust Blog" +title: "Vlad Faust" titleNoAppend: true -description: "Vlad Faust's personal blog" +description: "My personal website" cover: /public/img/me.jpg --- @@ -12,23 +12,19 @@ html(lang='en') include /head.pug //- Styles - link(rel='stylesheet', href='/public/styles/index.css') + link(rel='stylesheet' href='/public/styles/index.css') + link(rel='stylesheet' href='/public/styles/posts.css') + link(rel='stylesheet' href='/public/styles/projects.css') body include /header.pug main - h2 Articles - ul.posts - each post in collections.post.reverse().filter((post) => !post.data.hidden) - li - span.date= post.date.toDateString() - a.title(href=post.url)= post.data.title + section#posts + h2 Recent blog posts + include /posts.pug - h2 Notes - ul.notes - each note in collections.note.reverse().filter((note) => !note.data.hidden) - li - span.date= note.date.toDateString() - a.title(href=note.url)= note.data.title + section#projects + h2 Project list + include /projects.pug include /footer.pug diff --git a/notes/.gitignore b/notes/.gitignore deleted file mode 100644 index 29b54d4..0000000 --- a/notes/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.html -*.11tydata.json diff --git a/notes/2020-09-11-exporting-from-onyx.adoc b/notes/2020-09-11-exporting-from-onyx.adoc deleted file mode 100644 index ce89835..0000000 --- a/notes/2020-09-11-exporting-from-onyx.adoc +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Exporting from Onyx ---- - -:source-highlighter: highlightjs - -In Onyx, you may `export` a C entity from within an Onyx source file. -Later in the Onyx context, the entity is treated as if it was imported directly from a C header. - -Unlike in raw C headers, an `export` statement is written in some mix of C with Onyx, allowing Onyx annotations, Onyx macros and having function bodies written in Onyx. - -Normally, an `export` statement uses the ISO C syntax, and C vendor extensions support is undefined. -It is recommended to make use of Onyx annotations instead, which may be converted in accordance with a target vendor's semantics. -To achieve that, an Onyx implementation should maintain some sort of mapping between vendor C extensions and according Onyx semantics. - -For example, FNX supports GCC extensions. -Upon generating a header file from Onyx source, the C vendor option (`-c[-w]`) is respected, and Onyx annotations are converted to the vendor's. - -==== -.main.nx -``` -# A struct comment. -@[Pack] -export struct struct_t { - // A variable comment. - @[Align<8>] - int foo; - - double bar; -}; -``` - -After running `fnx doc -fh -c[-wgnu] main.nx`: - -.main.h -```c -// A struct comment. -struct __attribute__ ((__packed__)) struct_t { - // My comment. - int foo __attribute__ ((aligned (8))); - - double bar; -} -``` -==== - -A C macro is treated as a freestanding entity, hence requiring a separate `export` entity per macro, for example: - -==== -.main.nx -```nx -export #ifdef __GNUC__ -@[AlwaysInline] -export int foo(); -export #elif _MSC_VER -@[AlwaysInline] -export double foo(); -export #endif -``` - -After running `fnx doc -fh -c[-wgnu] main.nx`: - -.main.h -```c -#ifdef __GNUC__ -__attribute__((always_inline)) -int foo(); -#elif _MSC_VER -__attribute__((always_inline)) -double foo(); -#endif -``` - -Note that both annotations have expanded to GCC attributes regardless of the `_MSC_VER` macro, because the behaviour is controlled by the `-c[-w]` option. -To solve that, you either want to use explicit C annotations: - -.main.nx -```nx -export #ifdef __GNUC__ -export __attribute__((always_inline)) int foo(); -export #elif _MSC_VER -export __forceinline double foo(); -export #endif -``` - -Or expand them in macros (which is equivalent to writing them explicitly): - -.main.nx -```nx -macro attr(vendor) - {{ nx.id["AlwaysInline"]:c(vendor) }} -end - -export #ifdef __GNUC__ -export @attr("gnu") int foo(); -export #elif _MSC_VER -export @attr("msvc") double foo(); -export #endif -``` -==== - -Sometimes it may become cumbersome to have a separate `export` statement per entity, like in the examples above. -To deal with that, Onyx allows to export entire blocks in the same C-NX syntax. -The same rules apply. - -==== -.main.nx -```nx -export { -#ifdef __GNUC__ - @[AlwaysInline] - int foo(); -#elif _MSC_VER - @[AlwaysInline] - double foo(); -#endif - - // A C comment - @[NoInline] - void main() { - # Some Onyx code - } -} -``` - -After running `fnx doc -fh -c[-wgnu] main.nx`: - -.main.h -```c -#ifdef __GNUC__ -__attribute__((always_inline)) -int foo(); -#elif _MSC_VER -__attribute__((always_inline)) -double foo(); -#endif - -// A C comment -void main() __attribute__((noinline)); -``` -==== - -It is common to have entire files written in this manner when tight interoperability with C is implied, usually with an `.cnx` extension. diff --git a/notes/notes.json b/notes/notes.json deleted file mode 100644 index 280ae2a..0000000 --- a/notes/notes.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "tags": "note", - "layout": "note.pug" -} diff --git a/public/img/projects/jumpin_sweeties.png b/public/img/projects/jumpin_sweeties.png new file mode 100644 index 0000000000000000000000000000000000000000..3a69da5f38eb738786167e5031c77eb3cc5b528f GIT binary patch literal 50706 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 literal 0 HcmV?d00001 diff --git a/public/styles/common.css b/public/styles/common.css index 3fb2abb..57d54cf 100644 --- a/public/styles/common.css +++ b/public/styles/common.css @@ -9,3 +9,30 @@ body { font-family: 'Vollkorn', serif; width: 100%; } + +main { + display: flex; + flex-direction: column; + align-items: center; + justify-items: center; + width: 100%; + max-width: 100vw; +} + +@media (max-width: 768px) { + main { + padding: 0; + } +} + +section { + display: flex; + flex-direction: column; + align-items: center; + width: calc(100% - 1rem * 2); + padding: 2rem 1rem; +} + +section:not(:first-of-type) { + border-top: 1px solid rgba(0, 0, 0, 0.05); +} diff --git a/public/styles/cv.css b/public/styles/cv.css new file mode 100644 index 0000000..f8768f6 --- /dev/null +++ b/public/styles/cv.css @@ -0,0 +1,15 @@ +@import './common.css'; + +#about { + max-width: 42rem; +} + +big { + font-size: xx-large; + margin: 1rem 0; +} + +#about p { + margin: 1rem; + width: 100%; +} diff --git a/public/styles/index.css b/public/styles/index.css index cf215f3..ec6ce5f 100644 --- a/public/styles/index.css +++ b/public/styles/index.css @@ -1,43 +1 @@ @import './common.css'; - -main { - display: flex; - flex-direction: column; - align-items: center; - padding: 2rem 0; -} - -.posts { - /* list-style: none; */ - margin-top: 0; - padding-left: 0; -} - -.posts li { - display: grid; - grid-template-columns: 1fr 2fr; - column-gap: 0.5rem; -} - -.posts .date { - text-align: right; -} - -@media (max-width: 768px) { - main { - padding: 0; - } - - .posts { - padding-left: 2rem; - padding-right: 1rem; - } - - .posts .date { - display: none; - } - - .posts li { - display: list-item; - } -} diff --git a/public/styles/post.css b/public/styles/post.css index 50e9dc0..8913c1b 100644 --- a/public/styles/post.css +++ b/public/styles/post.css @@ -1,16 +1,10 @@ @import './common.css'; main { - display: flex; - flex-direction: column; - justify-items: center; - align-items: center; padding: 2rem 0; - width: 100%; - max-width: 100vw; } -main > h1 { +main>h1 { font-size: 3rem; line-height: 3rem; margin-bottom: 0; @@ -19,21 +13,22 @@ main > h1 { } @media (max-width: 768px) { - main > h1 { + main>h1 { font-size: 2rem; line-height: 2rem; } } -main > .meta { +main>.meta { font-style: italic; } -main > h1, main > .meta { +main>h1, +main>.meta { text-align: center; } -main > hr { +main>hr { border: none; height: 1px; background-color: lightgray; @@ -44,7 +39,11 @@ main > hr { article { width: 100%; - max-width: 35rem; + max-width: 42rem; +} + +article p { + width: 100%; } article .secret-link { @@ -57,16 +56,15 @@ article .secret-link { zoom: .6; } */ -main > h1, -main > .meta, -article > p, -article > h2, -article > h3, -article > h4, -article > h5, -article > h6, -article.asciidoctor .paragraph -{ +main>h1, +main>.meta, +article>p, +article>h2, +article>h3, +article>h4, +article>h5, +article>h6, +article.asciidoctor .paragraph { margin-left: 1rem; margin-right: 1rem; } @@ -97,10 +95,12 @@ blockquote { background-color: rgba(0, 0, 0, 0.025); } -pre[class*="language-"], pre.highlight { +pre[class*="language-"], +pre.highlight { width: 100%; box-sizing: border-box; max-width: 100vw; + font-size: 1rem !important; } pre.highlight { @@ -114,17 +114,17 @@ code { /* padding: 0 0.25rem; */ } -article.asciidoctor .exampleblock { - width: 100%; - box-sizing: border-box; - max-width: 100vw; - padding: 0.5rem 1rem; - background-color: rgba(0, 0, 0, 0.05); +.header-anchor { + opacity: 0; } -article.asciidoctor .listingblock > .title { - font-style: italic; - margin-bottom: -0.5rem; +h1:hover>.header-anchor, +h2:hover>.header-anchor, +h3:hover>.header-anchor, +h4:hover>.header-anchor, +h5:hover>.header-anchor, +h6:hover>.header-anchor { + opacity: 1; } details { @@ -187,7 +187,8 @@ table { border-spacing: 0; } -th, td { +th, +td { border-bottom: 1px solid rgba(0, 0, 0, 0.2); padding: 1rem; } diff --git a/public/styles/posts.css b/public/styles/posts.css new file mode 100644 index 0000000..8522f9d --- /dev/null +++ b/public/styles/posts.css @@ -0,0 +1,30 @@ +.posts { + /* list-style: none; */ + margin-top: 0; + padding-left: 0; +} + +.posts li { + display: grid; + grid-template-columns: 1fr 2fr; + column-gap: 0.5rem; +} + +.posts .date { + text-align: right; +} + +@media (max-width: 768px) { + .posts { + padding-left: 2rem; + padding-right: 1rem; + } + + .posts .date { + display: none; + } + + .posts li { + display: list-item; + } +} diff --git a/public/styles/projects.css b/public/styles/projects.css new file mode 100644 index 0000000..e5f1006 --- /dev/null +++ b/public/styles/projects.css @@ -0,0 +1,77 @@ +/* TODO: Improve scoping. */ +small.annotation { + text-align: center; + margin-top: -1rem; + margin-bottom: 1rem; +} + +/* TODO: Improve scoping. */ +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 1rem 0; + text-align: center; +} + +ul.projects { + --gap: 1rem; + + display: flex; + flex-wrap: wrap; + max-width: 768px; + padding: 0; + gap: var(--gap); +} + +ul.projects>li.project-card { + --border-width: 1px; + --border-radius: 4px; + --padding: 1.5rem; + + display: block; + width: calc(50% - (var(--padding) * 2) - var(--gap) / 2 - var(--border-width) * 2); + padding: var(--padding); + border-radius: var(--border-radius); + border: var(--border-width) solid rgba(0, 0, 0, 0.1) +} + +ul.projects>li.project-card>.title { + display: block; + margin-bottom: -0.25rem; + font-weight: bold; +} + +ul.projects>li.project-card>p { + margin: 0.5rem 0; +} + +ul.projects>li.project-card>p:last-child { + margin-bottom: 0; +} + +ul.projects>li.project-card .stack { + display: flex; + flex-wrap: wrap; + gap: 0.25rem; +} + +ul.projects>li.project-card .stack>span { + display: block; + padding: 0.25rem 0.5rem; + background-color: rgba(0, 0, 0, 0.1); + border-radius: 4px; + font-size: small; +} + +@media(max-width: 768px) { + ul.projects { + padding: 0 + } + + ul.projects>li.project-card { + width: 100%; + } +}