import { PageLayout } from "../comp/page_layout.ts"; import { AnyNode, E } from "ren/node.ts"; import { classNames } from "ren/attrs.ts"; import { Context } from "../../context.ts"; import { H3 } from "../uikit/typo.ts"; import { Link, RepoLink } from "../uikit/link.ts"; const tr = E.bind(null, "tr", []); const td = E.bind(null, "td", []); const th = E.bind(null, "th", []); export function WorksPage(ctx: Context): AnyNode { return PageLayout(ctx, [ E("div", classNames("content-width gap-v-1x5 responsive-typography"), [ H3(ctx.tr.Chronological), E("table", [], [ E("thead", [], [ tr([ th("Name"), th("Description"), th("Role"), th("Stack"), th("Start"), th("Status"), ]), ]), E("tbody", [], [ tr([ td([RepoLink("paren", "/pleshevskiy/paren")]), td("Library for parsing and rendering information."), td("author"), td("TS, Deno"), td("2022"), td(`${Status.ActiveDeveloped}, ${Status.Experimental}`), ]), tr([ td([RepoLink("hwt", "//github.com/pleshevskiy/hwt")]), td( "healthy workaholic timer – A tool that keeps you from breaking your health by working all day.", ), td("author"), td("Rust"), td("2022"), td(Status.ActiveDeveloped), ]), tr([ td([RepoLink("migra", "//github.com/pleshevskiy/migra")]), td("Simple SQL migration manager for your project."), td("author"), td("Rust"), td("2021"), td(Status.AsIs), ]), tr([ td([ RepoLink( "ood_persistence", "//github.com/pleshevskiy/ood_persistence", ), ]), td( "Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ", ), td("author"), td("Rust"), td("2021"), td(`${Status.Deprecated}, ${Status.Experimental}`), ]), tr([ td([ RepoLink( "espruino-starter", "//github.com/pleshevskiy/espruino-starter", ), ]), td( "Quickly start creating your new project on the espruino board or a board based on it.", ), td("author"), td("JS"), td("2021"), td(Status.AsIs), ]), tr([ td([ RepoLink( "sonic-channel", "//github.com/pleshevskiy/sonic-channel", ), ]), td("Rust client for sonic search backend."), td("author"), td("Rust"), td("2020"), td(Status.PassivelyMaintained), ]), tr([ td([ RepoLink( "react-rest-request", "//github.com/pleshevskiy/react-rest-request", ), ]), td("Minimalistic REST API client for React inspired by Apollo."), td("author"), td("TS, React"), td("2020"), td(Status.AsIs), ]), tr([ td([RepoLink("itconfig", "/pleshevskiy/itconfig")]), td( "Easy build a configs from environment variables and use it in globally.", ), td("author"), td("Rust"), td("2019"), td(Status.PassivelyMaintained), ]), tr([ td([ Link("Cabinet Master Progress", { href: "https://cabinet.masterprogress.ru", }), ]), td( "Student's cabinet of the educational center Master Progress (SSR + SPA)", ), td("Tech lead"), td("Python, Flask, React"), td("2019"), td(Status.PassivelyMaintained), ]), tr([ td([ Link("Master Progress", { href: "https://masterprogress.ru" }), ]), td( "Main website of the educational center Master Progress (SSR + Forms)", ), td("Tech lead"), td("Python, Flask"), td("2018"), td(Status.PassivelyMaintained), ]), tr([ td([RepoLink("ictmpl", "//github.com/pleshevskiy/ictmpl")]), td("Generate projects from templates"), td("author"), td("Python"), td("2018"), td(Status.AsIs), ]), tr([ td([RepoLink("jjcrypto", "//github.com/pleshevskiy/ictmpl")]), td("Javascript encoder and decoder"), td("author"), td("PHP"), td("2015"), td(Status.AsIs), ]), ]), ]), ]), ]); } enum Status { // New features are being added and bugs are being fixed. ActiveDeveloped = "actively-developed", // There are no plans for new features, but the maintainer intends to respond // to issues that get filed. PassivelyMaintained = "passively-maintained", // The package is feature complete, the maintainer does not intend to continue // working on it or providing support, but it works for the purposes it was // designed for. AsIs = "as-is", // The author wants to share it with the community but is not intending to // meet anyone's particular use case. Experimental = "experimental", // The current maintainer would like to transfer the package to someone else. LookingForMaintainer = "looking-for-maintainer", // The maintainer does not recommend using this package (the description of the // package can describe why, there could be a better solution available or // there could be problems with the package that the author does not want to fix). Deprecated = "deprecated", }