works: add dates and some cosmetic changes
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
ddd2ff6d06
commit
ced8cc8e4d
2 changed files with 80 additions and 58 deletions
7
render.ts
Normal file
7
render.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
export function renderDate(date: Date): string {
|
||||||
|
return date.toLocaleDateString(undefined, {
|
||||||
|
year: "numeric",
|
||||||
|
month: "2-digit",
|
||||||
|
day: "2-digit",
|
||||||
|
});
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import { classNames } from "ren/attrs.ts";
|
||||||
import { Context } from "../../context.ts";
|
import { Context } from "../../context.ts";
|
||||||
import { H3 } from "../uikit/typo.ts";
|
import { H3 } from "../uikit/typo.ts";
|
||||||
import { Link, RepoLink } from "../uikit/link.ts";
|
import { Link, RepoLink } from "../uikit/link.ts";
|
||||||
|
import { renderDate } from "../../render.ts";
|
||||||
|
|
||||||
const tr = E.bind(null, "tr", []);
|
const tr = E.bind(null, "tr", []);
|
||||||
const td = E.bind(null, "td", []);
|
const td = E.bind(null, "td", []);
|
||||||
|
@ -42,8 +43,12 @@ function ChronologicalWorksTable(ctx: Context, works: Work[]): AnyNode {
|
||||||
td(work.description),
|
td(work.description),
|
||||||
td(work.roles.join(", ")),
|
td(work.roles.join(", ")),
|
||||||
td(work.technologies.join(", ")),
|
td(work.technologies.join(", ")),
|
||||||
td(work.startDate),
|
td(renderDate(work.startDate)),
|
||||||
td(work.endDate ? work.endDate : (work.statuses ?? []).join(", ")),
|
td(
|
||||||
|
work.endDate
|
||||||
|
? renderDate(work.endDate)
|
||||||
|
: (work.statuses ?? []).join(", "),
|
||||||
|
),
|
||||||
]);
|
]);
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
@ -55,9 +60,8 @@ interface Work {
|
||||||
description: string;
|
description: string;
|
||||||
roles: Role[];
|
roles: Role[];
|
||||||
technologies: Technology[];
|
technologies: Technology[];
|
||||||
// TODO: use Date instead of string
|
startDate: Date;
|
||||||
startDate: string;
|
endDate?: Date;
|
||||||
endDate?: string;
|
|
||||||
statuses?: Status[];
|
statuses?: Status[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,6 +91,7 @@ enum Technology {
|
||||||
Bash = "Bash",
|
Bash = "Bash",
|
||||||
TreeSitter = "TreeSitter",
|
TreeSitter = "TreeSitter",
|
||||||
Nix = "Nix",
|
Nix = "Nix",
|
||||||
|
Lua = "Lua",
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Status {
|
enum Status {
|
||||||
|
@ -120,8 +125,13 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
name: RepoLink("tree-sitter-plpgsql", "/pleshevskiy/tree-sitter-plpgsql"),
|
name: RepoLink("tree-sitter-plpgsql", "/pleshevskiy/tree-sitter-plpgsql"),
|
||||||
description: "plpgsql grammar for tree-sitter",
|
description: "plpgsql grammar for tree-sitter",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.C, Technology.JavaScript, Technology.TreeSitter],
|
technologies: [
|
||||||
startDate: "2022",
|
Technology.C,
|
||||||
|
Technology.JavaScript,
|
||||||
|
Technology.TreeSitter,
|
||||||
|
Technology.Nix,
|
||||||
|
],
|
||||||
|
startDate: new Date("2023-01-05"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -129,25 +139,30 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description:
|
description:
|
||||||
"A wrapper over d2 which allows to use additional configs from d2 file",
|
"A wrapper over d2 which allows to use additional configs from d2 file",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Bash],
|
technologies: [Technology.Bash, Technology.Nix],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-12-12"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: RepoLink("tree-sitter-d2", "/pleshevskiy/tree-sitter-d2"),
|
name: RepoLink("tree-sitter-d2", "/pleshevskiy/tree-sitter-d2"),
|
||||||
description: "d2 grammar for tree-sitter",
|
description: "d2 grammar for tree-sitter",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.C, Technology.JavaScript, Technology.TreeSitter],
|
technologies: [
|
||||||
startDate: "2022",
|
Technology.C,
|
||||||
statuses: [Status.PassivelyMaintained],
|
Technology.JavaScript,
|
||||||
|
Technology.TreeSitter,
|
||||||
|
Technology.Nix,
|
||||||
|
],
|
||||||
|
startDate: new Date("2022-12-04"),
|
||||||
|
statuses: [Status.ActiveDeveloped],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: RepoLink("nix2lua", "/mynix/nix2lua"),
|
name: RepoLink("nix2lua", "/mynix/nix2lua"),
|
||||||
description:
|
description:
|
||||||
"This is a small but functional library that converts your nix configurations into lua format.",
|
"This is a small but functional library that converts your nix configurations into lua format.",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Nix],
|
technologies: [Technology.Nix, Technology.Lua],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-11-22"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -155,7 +170,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description: "Dotenv section switcher",
|
description: "Dotenv section switcher",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Rust],
|
technologies: [Technology.Rust],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-07-29"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -163,7 +178,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description: "A simple way to parse a string using type annotations.",
|
description: "A simple way to parse a string using type annotations.",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Rust],
|
technologies: [Technology.Rust],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-07-23"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -172,7 +187,15 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
"It helps you work with environment variables and convert it to any type using only type annotations",
|
"It helps you work with environment variables and convert it to any type using only type annotations",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Rust],
|
technologies: [Technology.Rust],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-07-18"),
|
||||||
|
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: new Date("2022-06-06"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -181,23 +204,15 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
"Dexios is a fast, secure, and open source command-line encryption tool.",
|
"Dexios is a fast, secure, and open source command-line encryption tool.",
|
||||||
roles: [Role.Collaborator],
|
roles: [Role.Collaborator],
|
||||||
technologies: [Technology.Rust],
|
technologies: [Technology.Rust],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-06-01"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
endDate: new Date("2023-02-28"),
|
||||||
},
|
|
||||||
{
|
|
||||||
name: RepoLink("paren", "/pleshevskiy/paren"),
|
|
||||||
description: "Library for parsing and rendering information.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.TypeScript, Technology.Deno],
|
|
||||||
startDate: "2022",
|
|
||||||
statuses: [Status.AsIs, Status.Experimental],
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: RepoLink("recipes", "/pleshevskiy/recipes"),
|
name: RepoLink("recipes", "/pleshevskiy/recipes"),
|
||||||
description: "Site with recipes which cares about privacy",
|
description: "Site with recipes which cares about privacy",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.TypeScript, Technology.Deno, Technology.Rust],
|
technologies: [Technology.TypeScript, Technology.Deno, Technology.Rust],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-05-04"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -210,16 +225,16 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
Technology.Docker,
|
Technology.Docker,
|
||||||
Technology.Drone,
|
Technology.Drone,
|
||||||
],
|
],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-03-16"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: RepoLink("docker stack drone plugin", "/drone_plugins/docker_stack"),
|
name: RepoLink("paren", "/pleshevskiy/paren"),
|
||||||
description: "Deploy to production using `docker stack deploy`",
|
description: "Library for parsing and rendering information.",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Docker, Technology.Drone],
|
technologies: [Technology.TypeScript, Technology.Deno],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-03-14"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.AsIs, Status.Experimental],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: RepoLink("hwt", "/pleshevskiy/hwt"),
|
name: RepoLink("hwt", "/pleshevskiy/hwt"),
|
||||||
|
@ -227,15 +242,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
"healthy workaholic timer – A tool that keeps you from breaking your health by working all day.",
|
"healthy workaholic timer – A tool that keeps you from breaking your health by working all day.",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Rust],
|
technologies: [Technology.Rust],
|
||||||
startDate: "2022",
|
startDate: new Date("2022-02-04"),
|
||||||
statuses: [Status.AsIs],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: RepoLink("migra", "/pleshevskiy/migra"),
|
|
||||||
description: "Simple SQL migration manager for your project.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: "2021",
|
|
||||||
statuses: [Status.AsIs],
|
statuses: [Status.AsIs],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -247,9 +254,17 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
"Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ",
|
"Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Rust],
|
technologies: [Technology.Rust],
|
||||||
startDate: "2021",
|
startDate: new Date("2021-10-12"),
|
||||||
statuses: [Status.Deprecated, Status.Experimental],
|
statuses: [Status.Deprecated, Status.Experimental],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: RepoLink("migra", "/pleshevskiy/migra"),
|
||||||
|
description: "Simple SQL migration manager for your project.",
|
||||||
|
roles: [Role.Author],
|
||||||
|
technologies: [Technology.Rust],
|
||||||
|
startDate: new Date("2021-01-31"),
|
||||||
|
statuses: [Status.AsIs],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: RepoLink(
|
name: RepoLink(
|
||||||
"espruino-starter",
|
"espruino-starter",
|
||||||
|
@ -259,7 +274,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
"Quickly start creating your new project on the espruino board or a board based on it.",
|
"Quickly start creating your new project on the espruino board or a board based on it.",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.JavaScript],
|
technologies: [Technology.JavaScript],
|
||||||
startDate: "2021",
|
startDate: new Date("2021"),
|
||||||
statuses: [Status.AsIs],
|
statuses: [Status.AsIs],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -270,7 +285,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description: "Rust client for sonic search backend.",
|
description: "Rust client for sonic search backend.",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Rust],
|
technologies: [Technology.Rust],
|
||||||
startDate: "2020",
|
startDate: new Date("2020"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -281,7 +296,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description: "Minimalistic REST API client for React inspired by Apollo.",
|
description: "Minimalistic REST API client for React inspired by Apollo.",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.TypeScript, Technology.React],
|
technologies: [Technology.TypeScript, Technology.React],
|
||||||
startDate: "2020",
|
startDate: new Date("2020"),
|
||||||
statuses: [Status.AsIs],
|
statuses: [Status.AsIs],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -290,7 +305,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
"Easy build a configs from environment variables and use it in globally.",
|
"Easy build a configs from environment variables and use it in globally.",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Rust],
|
technologies: [Technology.Rust],
|
||||||
startDate: "2019",
|
startDate: new Date("2019"),
|
||||||
statuses: [Status.Deprecated],
|
statuses: [Status.Deprecated],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -298,7 +313,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description: "Simple full-featured finite state machine for your project",
|
description: "Simple full-featured finite state machine for your project",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.TypeScript, Technology.NodeJS, Technology.Deno],
|
technologies: [Technology.TypeScript, Technology.NodeJS, Technology.Deno],
|
||||||
startDate: "2019",
|
startDate: new Date("2019"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -318,7 +333,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
Technology.Drone,
|
Technology.Drone,
|
||||||
Technology.Nix,
|
Technology.Nix,
|
||||||
],
|
],
|
||||||
startDate: "2019",
|
startDate: new Date("2019"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -326,7 +341,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description: "RSS generator for python",
|
description: "RSS generator for python",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Python],
|
technologies: [Technology.Python],
|
||||||
startDate: "2019",
|
startDate: new Date("2019"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -337,7 +352,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description: "Page info marshmallow schema for api",
|
description: "Page info marshmallow schema for api",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Python],
|
technologies: [Technology.Python],
|
||||||
startDate: "2019",
|
startDate: new Date("2019"),
|
||||||
statuses: [Status.AsIs],
|
statuses: [Status.AsIs],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -356,7 +371,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
Technology.Rust,
|
Technology.Rust,
|
||||||
Technology.Nix,
|
Technology.Nix,
|
||||||
],
|
],
|
||||||
startDate: "2018",
|
startDate: new Date("2018"),
|
||||||
statuses: [Status.ActiveDeveloped],
|
statuses: [Status.ActiveDeveloped],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -369,8 +384,8 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
Technology.React,
|
Technology.React,
|
||||||
Technology.Docker,
|
Technology.Docker,
|
||||||
],
|
],
|
||||||
startDate: "2018",
|
startDate: new Date("2018"),
|
||||||
endDate: "2019",
|
endDate: new Date("2019"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: Link("Master Progress", { href: "https://masterprogress.ru" }),
|
name: Link("Master Progress", { href: "https://masterprogress.ru" }),
|
||||||
|
@ -384,7 +399,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
Technology.Docker,
|
Technology.Docker,
|
||||||
Technology.Drone,
|
Technology.Drone,
|
||||||
],
|
],
|
||||||
startDate: "2018",
|
startDate: new Date("2018"),
|
||||||
statuses: [Status.PassivelyMaintained],
|
statuses: [Status.PassivelyMaintained],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -392,7 +407,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description: "Generate projects from templates",
|
description: "Generate projects from templates",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Python],
|
technologies: [Technology.Python],
|
||||||
startDate: "2018",
|
startDate: new Date("2018"),
|
||||||
statuses: [Status.AsIs],
|
statuses: [Status.AsIs],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -400,7 +415,7 @@ const CHRONOLOGICAL_WORKS: Work[] = [
|
||||||
description: "Javascript encoder and decoder",
|
description: "Javascript encoder and decoder",
|
||||||
roles: [Role.Author],
|
roles: [Role.Author],
|
||||||
technologies: [Technology.Php],
|
technologies: [Technology.Php],
|
||||||
startDate: "2015",
|
startDate: new Date("2015"),
|
||||||
statuses: [Status.AsIs],
|
statuses: [Status.AsIs],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in a new issue