pleshevski.ru/views/pages/works.ts
Dmitriy Pleshevskiy 9c9f4cd19b
All checks were successful
continuous-integration/drone/push Build is passing
ui(page/works): add latest works
2022-08-04 13:13:16 +03:00

363 lines
10 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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, content: AnyNode): AnyNode {
return PageLayout(ctx, [
E("div", classNames("content-width gap-v-1x5 responsive-typography"), [
content,
H3(ctx.tr.Chronological),
ChronologicalWorksTable(ctx, CHRONOLOGICAL_WORKS),
]),
]);
}
function ChronologicalWorksTable(ctx: Context, works: Work[]): AnyNode {
return E("table", [], [
E("thead", [], [
tr([
th(ctx.tr.Name),
th(ctx.tr.Description),
th(ctx.tr.Role),
th(ctx.tr.Technologies),
th(ctx.tr.Start),
th(ctx.tr.Status_or_End),
]),
]),
E(
"tbody",
[],
works.map((work) => {
return tr([
td([work.name]),
td(work.description),
td(work.roles.join(", ")),
td(work.technologies.join(", ")),
td(work.startDate),
td(work.endDate ? work.endDate : (work.statuses ?? []).join(", ")),
]);
}),
),
]);
}
interface Work {
name: AnyNode;
description: string;
roles: Role[];
technologies: Technology[];
// TODO: use Date instead of string
startDate: string;
endDate?: string;
statuses?: Status[];
}
enum Role {
Collaborator = "collaborator",
Author = "author",
TechLead = "tech lead",
TeamLead = "team lead",
Developer = "developer",
}
enum Technology {
JavaScript = "JS",
TypeScript = "TS",
Rust = "Rust",
Python = "Python",
Php = "PHP",
Deno = "Deno",
NodeJS = "NodeJS",
Flask = "Flask",
React = "React",
Antd = "Antd",
Postgresql = "PostgreSQL",
Docker = "Docker",
Drone = "Drone",
}
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",
}
const CHRONOLOGICAL_WORKS: Work[] = [
{
name: RepoLink("vnetod", "/pleshevskiy/vnetod"),
description: "Dotenv section switcher",
roles: [Role.Author],
technologies: [Technology.Rust],
startDate: "2022",
statuses: [Status.PassivelyMaintained],
},
{
name: RepoLink("estring", "github.com/pleshevskiy/estring"),
description: "A simple way to parse a string using type annotations.",
roles: [Role.Author],
technologies: [Technology.Rust],
startDate: "2022",
statuses: [Status.ActiveDeveloped],
},
{
name: RepoLink("enve", "github.com/pleshevskiy/enve"),
description:
"It helps you work with environment variables and convert it to any type using only type annotations",
roles: [Role.Author],
technologies: [Technology.Rust],
startDate: "2022",
statuses: [Status.ActiveDeveloped],
},
{
name: RepoLink("dexios", "github.com/brxken128/dexios"),
description:
"Dexios is a fast, secure, and open source command-line encryption tool.",
roles: [Role.Collaborator],
technologies: [Technology.Rust],
startDate: "2022",
statuses: [Status.ActiveDeveloped],
},
{
name: RepoLink("paren", "/pleshevskiy/paren"),
description: "Library for parsing and rendering information.",
roles: [Role.Author],
technologies: [Technology.TypeScript, Technology.Deno],
startDate: "2022",
statuses: [Status.ActiveDeveloped, Status.Experimental],
},
{
name: RepoLink("recipes", "/pleshevskiy/recipes"),
description: "Site with recipes which cares about privacy",
roles: [Role.Author],
technologies: [Technology.TypeScript, Technology.Deno, Technology.Rust],
startDate: "2022",
statuses: [Status.ActiveDeveloped],
},
{
name: RepoLink("pleshevski.ru", "/pleshevskiy/pleshevski.ru"),
description: "Source code of my personal site",
roles: [Role.Author],
technologies: [
Technology.TypeScript,
Technology.Deno,
Technology.Docker,
Technology.Drone,
],
startDate: "2022",
statuses: [Status.PassivelyMaintained],
},
{
name: RepoLink("docker stack drone plugin", "/drone_plugins/docker_stack"),
description: "Deploy to production using `docker stack deploy`",
roles: [Role.Author],
technologies: [Technology.Docker, Technology.Drone],
startDate: "2022",
statuses: [Status.PassivelyMaintained],
},
{
name: RepoLink("hwt", "//github.com/pleshevskiy/hwt"),
description:
"healthy workaholic timer A tool that keeps you from breaking your health by working all day.",
roles: [Role.Author],
technologies: [Technology.Rust],
startDate: "2022",
statuses: [Status.ActiveDeveloped],
},
{
name: RepoLink("migra", "//github.com/pleshevskiy/migra"),
description: "Simple SQL migration manager for your project.",
roles: [Role.Author],
technologies: [Technology.Rust],
startDate: "2021",
statuses: [Status.AsIs],
},
{
name: RepoLink(
"ood_persistence",
"//github.com/pleshevskiy/ood_persistence",
),
description:
"Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ",
roles: [Role.Author],
technologies: [Technology.Rust],
startDate: "2021",
statuses: [Status.Deprecated, Status.Experimental],
},
{
name: RepoLink(
"espruino-starter",
"//github.com/pleshevskiy/espruino-starter",
),
description:
"Quickly start creating your new project on the espruino board or a board based on it.",
roles: [Role.Author],
technologies: [Technology.JavaScript],
startDate: "2021",
statuses: [Status.AsIs],
},
{
name: RepoLink(
"sonic-channel",
"//github.com/pleshevskiy/sonic-channel",
),
description: "Rust client for sonic search backend.",
roles: [Role.Author],
technologies: [Technology.Rust],
startDate: "2020",
statuses: [Status.PassivelyMaintained],
},
{
name: RepoLink(
"react-rest-request",
"//github.com/pleshevskiy/react-rest-request",
),
description: "Minimalistic REST API client for React inspired by Apollo.",
roles: [Role.Author],
technologies: [Technology.TypeScript, Technology.React],
startDate: "2020",
statuses: [Status.AsIs],
},
{
name: RepoLink("itconfig", "/pleshevskiy/itconfig"),
description:
"Easy build a configs from environment variables and use it in globally.",
roles: [Role.Author],
technologies: [Technology.Rust],
startDate: "2019",
statuses: [Status.ActiveDeveloped],
},
{
name: RepoLink("it-fsm", "/pleshevskiy/it-fsm"),
description: "Simple full-featured finite state machine for your project",
roles: [Role.Author],
technologies: [Technology.TypeScript, Technology.NodeJS, Technology.Deno],
startDate: "2019",
statuses: [Status.PassivelyMaintained],
},
{
name: Link("Cabinet Master Progress", {
href: "https://cabinet.masterprogress.ru",
}),
description:
"Student's cabinet of the educational center Master Progress (SSR + SPA)",
roles: [Role.TechLead],
technologies: [
Technology.Python,
Technology.Flask,
Technology.Postgresql,
Technology.TypeScript,
Technology.React,
Technology.Docker,
Technology.Drone,
],
startDate: "2019",
statuses: [Status.PassivelyMaintained],
},
{
name: RepoLink("genrss", "//github.com/icetemple/genrss"),
description: "RSS generator for python",
roles: [Role.Author],
technologies: [Technology.Python],
startDate: "2019",
statuses: [Status.PassivelyMaintained],
},
{
name: RepoLink(
"marshmallow_pageinfo",
"//github.com/icetemple/marshmallow_pageinfo",
),
description: "Page info marshmallow schema for api",
roles: [Role.Author],
technologies: [Technology.Python],
startDate: "2019",
statuses: [Status.AsIs],
},
{
name: Link("BinaryManagement", {
href: "https://www.binarymanagement.com",
}),
description: "Project management tool for interior designers",
roles: [Role.Developer, Role.TechLead, Role.TeamLead],
technologies: [
Technology.TypeScript,
Technology.NodeJS,
Technology.React,
Technology.Antd,
Technology.Docker,
Technology.Drone,
],
startDate: "2018",
statuses: [Status.ActiveDeveloped],
},
{
name: Link("CoreSpirit", { href: "https://corespirit.com" }),
description: "Social platform focusing on human and planetary enhancement",
roles: [Role.Developer],
technologies: [
Technology.TypeScript,
Technology.NodeJS,
Technology.React,
Technology.Docker,
],
startDate: "2018",
endDate: "2019",
},
{
name: Link("Master Progress", { href: "https://masterprogress.ru" }),
description:
"Main website of the educational center Master Progress (SSR + Forms)",
roles: [Role.TechLead],
technologies: [
Technology.Python,
Technology.Flask,
Technology.JavaScript,
Technology.Docker,
Technology.Drone,
],
startDate: "2018",
statuses: [Status.PassivelyMaintained],
},
{
name: RepoLink("ictmpl", "//github.com/pleshevskiy/ictmpl"),
description: "Generate projects from templates",
roles: [Role.Author],
technologies: [Technology.Python],
startDate: "2018",
statuses: [Status.AsIs],
},
{
name: RepoLink("jjcrypto", "//github.com/pleshevskiy/ictmpl"),
description: "Javascript encoder and decoder",
roles: [Role.Author],
technologies: [Technology.Php],
startDate: "2015",
statuses: [Status.AsIs],
},
];