diff --git a/.cspell-allowed-words.txt b/.cspell-allowed-words.txt index 68234c1f66..35d42a92af 100644 --- a/.cspell-allowed-words.txt +++ b/.cspell-allowed-words.txt @@ -111,6 +111,7 @@ firstpost flarum flathub flatpak +flatpaks flicky flto fluidsynth @@ -244,11 +245,13 @@ mygui nanorc necromancing nemo +neochat neovim netgear newerth nfpath nghttp +nheko nightlies nmbdoptions noauto diff --git a/docs/organization/core-values.md b/docs/organization/core-values.md new file mode 100644 index 0000000000..e1eb6245e1 --- /dev/null +++ b/docs/organization/core-values.md @@ -0,0 +1,41 @@ +--- +description: Organizational Core Values for the Solus Project +title: Core Values +--- + +The Solus Project has a few core values that inform all of our decision-making. + +## Transparency + +As a team, we strive to be as transparent as possible with our community about the decisions that we make. We believe that it is important for our community to be able to see what we're doing and why. It builds trust between the Solus team and the community. When users understand the decision-making process, in-progress development, and reasons for our choices, they feel more confident in our direction. + +A part of transparency is accountability. By being open about our work, the team can take responsibility for both successes and failures, building a culture of continual improvement. + +To be transparent, we: + +- Are proactive with our communication with the community via our forum and social media. +- Encourage discussion on our [public forum](https://discuss.getsol.us), [Matrix space](https://matrix.to/#/#solus:matrix.org), and [Mastodon](https://fosstodon.org/@solus). +- Make all financial transactions visible via our [OpenCollective page](https://opencollective.com/getsolus#category-BUDGET). + +## Stability + +Users want to use a stable operating system, and so do we. It's never a good experience when something breaks after downloading and installing updates, and even moreso when you have to get things done. Thus, we believe it is important to provide a stable system for people to use. + +There are a few ways we accomplish this: + +- Use a "stable-rolling" model: Install once and update forever. +- Don't update packages to new versions just for the sake of having the latest version. +- Test all package updates before pushing them to all users. +- Be responsive about addressing new issues. + +All software has bugs, and inevitably, some will slip through the cracks. However, we believe that our approach and methodology strike the best balance between having the latest software and having the greatest stability. + +## Community + +Community is the heartbeat of Solus. Our community is where users can come together to share knowledge, solve problems, and collaborate on projects. Having a strong community helps ensure that we can be responsive to the needs of our users. It enables us to evolve and improve, while keeping our users' interests in mind. + +When our users feel valued and supported, they are more likely to stick with us, encouraging long-term engagement. Further, having a diverse community provides more points of view about developments and issues, which is very valuable for a smaller team like ours. + +Lastly, a supportive community leads to faster problem-solving. Users can provide assistance to other users quickly. This improves the overall user experience and can prevent problems from escalating. + +The most important aspect of our community is Kindness. Being kind makes people feel welcome, and more likely to stick around, thus strengthening our community. diff --git a/docs/organization/getting-involved.md b/docs/organization/getting-involved.md new file mode 100644 index 0000000000..6a35e38424 --- /dev/null +++ b/docs/organization/getting-involved.md @@ -0,0 +1,44 @@ +--- +description: How to get involved with the Solus Project +title: Getting Involved +--- + +There are many ways you can get involved with the Solus Project. Contributing package updates is only one way to help out the project. Some of them don't even involve any packaging or software knowledge. + +No matter how you wish to contribute, the best place to start is joining our [Matrix Space](https://matrix.to/#/#solus:matrix.org). There you'll find a helpful community willing to answer any questions you may have. + +:::info +Matrix is an open protocol for decentralized, secure communication. + +You can access Matrix spaces with dedicated clients. Solus has packaged [Element](https://element.io), [Neochat](https://apps.kde.org/neochat/), and [Nheko](https://nheko-reborn.github.io). Other clients are available as Flatpaks. See [here](https://matrix.org/ecosystem/clients/) for more information on Matrix clients. +::: + +## Packaging contributions + +One of the most visible ways of helping the project is by updating and maintaining packages. The Solus repository contains thousands of packages, which is a lot for a small team to handle. We are always welcoming and appreciative of assistance in maintaining software in the repository. + +Getting started with packaging is generally pretty easy. If you are looking to help with packaging, check out our [packaging documentation](/packaging). + +## Filing issues + +A great way to help out the project is by filing issues for problems that you are experiencing. This makes it much easier to track problems that people are having. They help ensure that nothing gets forgotten, and lets both you and us know when they've been resolved. Issues should be opened against our [packages repository](https://github.com/getsolus/packages/issues). + +:::note +When filing an issue, please be as detailed as possible. The more details there are, the easier it is to understand the problem. +::: + +Issues are also a great way to let us know that a piece of software in the repository is out-of-date. These help the team know and track what packages need to be updated, how out-of-date they are, and how to prioritize those updates. They also let us know there is demand for particular software. + +## Documentation + +Good and up-to-date documentation is a very valuable resource. Contributing to our Help Center documentation not only helps us, it helps the entire community. It's also easier than packaging. If writing help articles is something you are interested in, head on over to our [Help Center repository](https://github.com/getsolus/help-center-docs) on GitHub. The project README has all the information you need to get started. + +## Financial + +Another way to contribute to Solus without needing any technical skills or time is financially. Solus is a volunteer-run project, and we rely on donations from the community to keep the lights on. We understand that donating money can be tough, especially in these challenging times. As such, we are very grateful to everyone who contributes financially to the project. If this is something you want and are able to do, head over to our page on [Open Collective](https://opencollective.com/getsolus). + +:::info +[Open Collective](https://opencollective.com) is a platform where communities can collect and disburse money transparently, to sustain and grow their projects. + +Solus uses the [Open Source Collective](https://www.oscollective.org) non-profit fiscal host. +::: diff --git a/docs/organization/intro.md b/docs/organization/intro.md new file mode 100644 index 0000000000..ddbe21a3f9 --- /dev/null +++ b/docs/organization/intro.md @@ -0,0 +1,9 @@ +--- +description: Organization documentation for Solus +title: Welcome +sidebar_position: -1 +--- + +# Welcome + +This section contains information about the Solus Project organization. diff --git a/docs/organization/teams.mdx b/docs/organization/teams.mdx new file mode 100644 index 0000000000..8495b609dd --- /dev/null +++ b/docs/organization/teams.mdx @@ -0,0 +1,12 @@ +--- +description: Teams within the Solus organization +hide_title: true +title: Teams +--- + +import { Administration } from "@site/src/components/Person"; +import { TeamsList } from "@site/src/components/Teams"; + + + + diff --git a/docusaurus.config.js b/docusaurus.config.js index 5029d30f97..e4a614e45f 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -113,6 +113,12 @@ const config = { position: "left", label: "Packaging", }, + { + type: "docSidebar", + sidebarId: "organizationSidebar", + position: "left", + label: "Organization", + }, { to: "blog", label: "Dev Log", diff --git a/sidebars.js b/sidebars.js index 0529735f42..42b4d4645f 100644 --- a/sidebars.js +++ b/sidebars.js @@ -16,6 +16,7 @@ const sidebars = { // By default, Docusaurus generates a sidebar from the docs folder structure userSidebar: [{ type: "autogenerated", dirName: "user" }], packagingSidebar: [{ type: "autogenerated", dirName: "packaging" }], + organizationSidebar: [{ type: "autogenerated", dirName: "organization" }], // But you can create a sidebar manually /* diff --git a/src/components/Person.tsx b/src/components/Person.tsx new file mode 100644 index 0000000000..e045bc8a6f --- /dev/null +++ b/src/components/Person.tsx @@ -0,0 +1,93 @@ +import { Avatar, Box, Stack, SxProps, useMediaQuery } from "@mui/material"; +import React from "react"; +import { Person as PersonType, WebsiteType } from "../types"; +import { SiteTheme } from "../theme"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import Link from "@docusaurus/Link"; +import { Teams } from "../data/teams"; +import { People } from "../data/people"; +import Grid2 from "@mui/material/Unstable_Grid2"; + +type PersonProps = { + embeddedIn: string; + isBadge?: boolean; + onAvatarClick?: () => void; + person: PersonType; + sx?: SxProps; +}; + +export const Person = ({ embeddedIn, isBadge = false, onAvatarClick, person, sx = {} }: PersonProps) => { + const usePersonRow = useMediaQuery(SiteTheme.breakpoints.up("sm")); + const key = `Person-${embeddedIn}-${person.names.first}${person.names.last}`; + const avatar = useBaseUrl(`/img/avatars/${person.names.first}${person.names.last}.webp`); + const name = `${person.names.first} ${person.names.last}`; + + const github = person.websites.find((w) => w.type === WebsiteType.GITHUB); + const primarySite = person.websites.find((w) => w.type === WebsiteType.WEBSITE) ?? github; + + return ( + + + + + + + + + {name} + {!isBadge && + person.websites.map((w) => ( + + + + ))} + + {!isBadge && ( + <> + + {person.description} + + {person.matrix && Matrix: {person.matrix}} + + )} + + + ); +}; + +export const Administration = () => { + const adminTeam = Teams.find((t) => t.name === "Admin Team"); + const administration = adminTeam?.members.map(([member]) => People[member]); + const useGrid = useMediaQuery(SiteTheme.breakpoints.up("xl")); + + return ( + +

Administration

+ {adminTeam && adminTeam.description} + + {administration && + administration.map((person) => ( + + + + ))} + +
+ ); +}; diff --git a/src/components/Teams.tsx b/src/components/Teams.tsx new file mode 100644 index 0000000000..a6a2a0482e --- /dev/null +++ b/src/components/Teams.tsx @@ -0,0 +1,74 @@ +import { Backdrop, Box, Stack } from "@mui/material"; +import React, { useState } from "react"; +import { Person as PersonType, Team as TeamType } from "../types"; +import { AutoColumnOnSmall } from "../utils/auto"; +import { Person } from "./Person"; +import { SiteTheme } from "../theme"; +import { People } from "../data/people"; +import { Teams } from "../data/teams"; + +type TeamMemberProps = { + haveSupplementalInfo: boolean; + teamName: string; + person: PersonType; + supplementalInfo: string | null; +}; + +export const TeamMember = ({ haveSupplementalInfo, teamName, person, supplementalInfo }: TeamMemberProps) => { + const [showOverlay, setShowOverlay] = useState(false); + + return ( + + setShowOverlay(false)} + open={showOverlay} + sx={{ p: 2, zIndex: SiteTheme.zIndex.tooltip }} + > + + + setShowOverlay(true)} + person={person} + sx={{ minWidth: 240 }} + /> + {haveSupplementalInfo && {supplementalInfo}} + + ); +}; + +export const Team = ({ team }: { team: TeamType }) => { + const haveSupplementalInfo = !!team.members.find((el) => !!el[1]); + + return ( + +

{team.name}

+

{team.description}

+ {team.members.map(([name, supplementalInfo]) => ( + + ))} +
+ ); +}; + +export const TeamsList = () => { + return ( + +

Teams

+ The Solus project is made up of several teams. Each team has its own responsibilities and focuses. Because of the + size of the overall Solus organization, members are often on multiple teams. + {Teams.filter((t) => t.name !== "Admin Team").map((team) => ( + + ))} +
+ ); +}; diff --git a/src/components/home/Doc.tsx b/src/components/home/Doc.tsx index 969ff801d2..77389eff28 100644 --- a/src/components/home/Doc.tsx +++ b/src/components/home/Doc.tsx @@ -7,7 +7,7 @@ import Grid2 from "@mui/material/Unstable_Grid2"; const Doc = ({ title, img, description, link }: DocSection) => { return ( - + {img} diff --git a/src/css/custom.css b/src/css/custom.css index a73d4fbace..277d89b4fb 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -6,6 +6,10 @@ /* You can override the default Infima variables here. */ :root { + --marble: #f1f1f1; + --dark: #1f1f1f; + + --ifm-card-background-color: var(--marble); --ifm-color-primary: #2374d3; --ifm-color-primary-dark: #2068be; --ifm-color-primary-darker: #1e63b3; @@ -21,6 +25,7 @@ /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme="dark"] { + --ifm-card-background-color: var(--dark); --ifm-color-primary: #5294e2; --ifm-color-primary-dark: #3884de; --ifm-color-primary-darker: #2a7cdb; @@ -30,3 +35,8 @@ --ifm-color-primary-lightest: #a1c5ef; --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); } + +.card--bg { + background-color: var(--ifm-card-background-color); + border-radius: var(--ifm-card-border-radius); +} diff --git a/src/data/people.tsx b/src/data/people.tsx new file mode 100644 index 0000000000..d5b89d43e8 --- /dev/null +++ b/src/data/people.tsx @@ -0,0 +1,204 @@ +import { Person, WebsiteType } from "../types"; + +import GitHubIcon from "@mui/icons-material/GitHub"; +import LanguageIcon from "@mui/icons-material/Language"; +import MastodonIcon from "@site/static/img/icons/mastodon.svg"; + +export const People: Record = { + AlgentAlbrahimi: { + description: "", + matrix: "@algent:matrix.org", + names: { + first: "Algent", + last: "Albrahimi", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/algent-al", + type: WebsiteType.GITHUB, + }, + { + icon: MastodonIcon, + to: "https://fosstodon.org/@algent", + type: WebsiteType.MASTODON, + }, + ], + }, + DavidHarder: { + description: "", + matrix: "@davidjharder:matrix.org", + names: { + first: "David", + last: "Harder", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/davidjharder", + type: WebsiteType.GITHUB, + }, + ], + }, + EvanMaddock: { + description: + "Sci-fi and tech nerd who enjoys programming, woodworking, cooking, and other miscellaneous stuff. Not necessarily in that order.", + matrix: "@ebonjaeger:matrix.org", + names: { + first: "Evan", + last: "Maddock", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/EbonJaeger", + type: WebsiteType.GITHUB, + }, + { + icon: MastodonIcon, + to: "https://fosstodon.org/@EbonJaeger", + type: WebsiteType.MASTODON, + }, + ], + }, + GavinZhao: { + description: "", + matrix: "@gzgavinzhao:matrix.org", + names: { + first: "Gavin", + last: "Zhao", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/GZGavinZhao", + type: WebsiteType.GITHUB, + }, + ], + }, + HansKelson: { + description: "", + matrix: "@sheepman:m.stupid.frickin.website", + names: { + first: "Hans", + last: "Kelson", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/sheepman4267", + type: WebsiteType.GITHUB, + }, + ], + }, + JoeyRiches: { + description: "", + matrix: "@joebonrichie:matrix.org", + names: { + first: "Joey", + last: "Riches", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/joebonrichie", + type: WebsiteType.GITHUB, + }, + ], + }, + ReillyBrogan: { + description: "", + matrix: "@reillybrogan:matrix.org", + names: { + first: "Reilly", + last: "Brogan", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/ReillyBrogan", + type: WebsiteType.GITHUB, + }, + ], + }, + SilkeHofstra: { + description: "", + matrix: "@silex:slxh.eu", + names: { + first: "Silke", + last: "Hofstra", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/silkeh", + type: WebsiteType.GITHUB, + }, + { + icon: LanguageIcon, + to: "https://slxh.nl", + type: WebsiteType.WEBSITE, + }, + ], + }, + TraceyClark: { + description: "", + matrix: "@traceyc:matrix.org", + names: { + first: "Tracey", + last: "Clark", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/TraceyC77", + type: WebsiteType.GITHUB, + }, + { + icon: MastodonIcon, + to: "https://fosstodon.org/@TraceyC", + type: WebsiteType.MASTODON, + }, + { + icon: LanguageIcon, + to: "https://www.tlcnet.info", + type: WebsiteType.WEBSITE, + }, + ], + }, + TroyHarvey: { + description: "", + matrix: "@harveydevel:matrix.org", + names: { + first: "Troy", + last: "Harvey", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/HarveyDevel", + type: WebsiteType.GITHUB, + }, + ], + }, + Malfisya: { + description: "", + matrix: "@alfisya:matrix.org", + names: { + first: "Muhammad", + last: "Syahrin", + }, + websites: [ + { + icon: GitHubIcon, + to: "https://github.com/malfisya", + type: WebsiteType.GITHUB, + }, + { + icon: MastodonIcon, + to: "https://masto.ai/@alfisya", + type: WebsiteType.MASTODON, + }, + ], + }, +}; diff --git a/src/data/teams.ts b/src/data/teams.ts new file mode 100644 index 0000000000..c227ab7f23 --- /dev/null +++ b/src/data/teams.ts @@ -0,0 +1,84 @@ +import { Team } from "../types"; + +export const Teams: Team[] = [ + { + description: + "This team supports and enables everyone else to be able to do what needs to be done. They are also responsible for the high level decisions that chart the overall course of the project.", + members: [ + ["ReillyBrogan", null], + ["JoeyRiches", null], + ["TraceyClark", null], + ["TroyHarvey", null], + ["DavidHarder", null], + ], + name: "Admin Team", + }, + { + description: + "This team has push access to all Solus repositories, and makes general decisions about the project.", + members: [ + ["ReillyBrogan", null], + ["EvanMaddock", null], + ["JoeyRiches", null], + ["SilkeHofstra", null], + ["TraceyClark", null], + ["DavidHarder", null], + ["TroyHarvey", null], + ["AlgentAlbrahimi", null], + ["GavinZhao", null], + ["HansKelson", null], + ["Malfisya", null], + ], + name: "Solus Staff", + }, + { + description: + "This team handles the building of packages in the Solus repository. Some team members help maintain one or more of our included desktop environments.", + members: [ + ["ReillyBrogan", "Plasma"], + ["EvanMaddock", "Budgie/Xfce"], + ["JoeyRiches", "GNOME"], + ["SilkeHofstra", null], + ["TraceyClark", null], + ["DavidHarder", null], + ["TroyHarvey", null], + ["AlgentAlbrahimi", null], + ["GavinZhao", null], + ["HansKelson", null], + ["Malfisya", "GNOME"], + ], + name: "Packaging Team", + }, + { + description: "This team writes and maintains software for Solus, such as eopkg, ypkg, and solbuild.", + members: [ + ["ReillyBrogan", null], + ["SilkeHofstra", null], + ["JoeyRiches", null], + ["HansKelson", null], + ], + name: "Development Team", + }, + { + description: + "This team is responsible for ensuring that the Solus infrastructure and services are kept up to date and running smoothly.", + members: [ + ["TroyHarvey", null], + ["ReillyBrogan", null], + ["SilkeHofstra", null], + ], + name: "Infrastructure Team", + }, + { + description: + "This team is responsible for interacting with the community through documentation, communication, and moderation.", + members: [ + ["DavidHarder", null], + ["EvanMaddock", null], + ["SilkeHofstra", null], + ["TraceyClark", null], + ["TroyHarvey", null], + ], + name: "Community & Moderation Team", + }, +]; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6a59f6eb1f..5f6c53cf8c 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -5,6 +5,7 @@ import Container from "@mui/material/Container"; import Grid2 from "@mui/material/Unstable_Grid2"; import { DocSection } from "../types"; +import Groups2OutlinedIcon from "@mui/icons-material/Groups2Outlined"; import PersonOutlineOutlinedIcon from "@mui/icons-material/PersonOutlineOutlined"; import Inventory2OutlinedIcon from "@mui/icons-material/Inventory2Outlined"; import EngineeringOutlinedIcon from "@mui/icons-material/EngineeringOutlined"; @@ -24,6 +25,12 @@ const DocList: DocSection[] = [ link: "docs/packaging", img: , }, + { + title: "Organization", + description: <>Learn about the Solus Project organization, and how to contribute., + link: "docs/organization/intro", + img: , + }, { title: "Dev Log", description: <>Learn what our developers have been up to, and preview upcoming changes., diff --git a/src/types.ts b/src/types.ts index e700b00462..d253919b83 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,6 +1,40 @@ +import { SvgIconTypeMap } from "@mui/material"; +import { OverridableComponent } from "@mui/material/OverridableComponent"; +import { ComponentType, SVGProps } from "react"; + +export enum WebsiteType { + GITHUB, + MASTODON, + WEBSITE, +} + export type DocSection = { description: JSX.Element; img: JSX.Element; link: string; title: string; }; + +export type Person = { + description: string; + matrix?: string; + names: PersonName; + websites: PersonWebsite[]; +}; + +export type PersonName = { + first: string; + last: string; +}; + +export type PersonWebsite = { + icon: OverridableComponent> | ComponentType>; + to: string; + type: WebsiteType; +}; + +export type Team = { + description: string; + members: [string, null | string][]; + name: string; +}; diff --git a/src/utils/auto.tsx b/src/utils/auto.tsx new file mode 100644 index 0000000000..1207d5815d --- /dev/null +++ b/src/utils/auto.tsx @@ -0,0 +1,19 @@ +import { Breakpoint, useMediaQuery, useTheme } from "@mui/material"; + +export const AutoCenteredOnSmall = (): "center" | "flex-start" => { + const theme = useTheme(); + + return useMediaQuery(theme.breakpoints.down("md")) ? "center" : "flex-start"; +}; + +type StackDirection = "column" | "column-reverse" | "row" | "row-reverse"; + +export const AutoColumnOnSmall = ( + dir: StackDirection = "row", + columnDir: StackDirection = "column", + breakpoint: Breakpoint = "md" +): StackDirection => { + const theme = useTheme(); + + return useMediaQuery(theme.breakpoints.down(breakpoint)) ? columnDir : dir; +}; diff --git a/static/img/avatars/AlexanderVorobyev.webp b/static/img/avatars/AlexanderVorobyev.webp new file mode 100644 index 0000000000..81bb6e0335 Binary files /dev/null and b/static/img/avatars/AlexanderVorobyev.webp differ diff --git a/static/img/avatars/AlgentAlbrahimi.webp b/static/img/avatars/AlgentAlbrahimi.webp new file mode 100644 index 0000000000..6dcc6aa4f6 Binary files /dev/null and b/static/img/avatars/AlgentAlbrahimi.webp differ diff --git a/static/img/avatars/DavidHarder.webp b/static/img/avatars/DavidHarder.webp new file mode 100644 index 0000000000..ac6e7f76ba Binary files /dev/null and b/static/img/avatars/DavidHarder.webp differ diff --git a/static/img/avatars/EvanMaddock.webp b/static/img/avatars/EvanMaddock.webp new file mode 100644 index 0000000000..7393eb7a7b Binary files /dev/null and b/static/img/avatars/EvanMaddock.webp differ diff --git a/static/img/avatars/GavinZhao.webp b/static/img/avatars/GavinZhao.webp new file mode 100644 index 0000000000..8de90288e2 Binary files /dev/null and b/static/img/avatars/GavinZhao.webp differ diff --git a/static/img/avatars/HansKelson.webp b/static/img/avatars/HansKelson.webp new file mode 100644 index 0000000000..9f4c558546 Binary files /dev/null and b/static/img/avatars/HansKelson.webp differ diff --git a/static/img/avatars/IkeyDoherty.webp b/static/img/avatars/IkeyDoherty.webp new file mode 100644 index 0000000000..004be294d6 Binary files /dev/null and b/static/img/avatars/IkeyDoherty.webp differ diff --git a/static/img/avatars/JoeyRiches.webp b/static/img/avatars/JoeyRiches.webp new file mode 100644 index 0000000000..9a5009b23a Binary files /dev/null and b/static/img/avatars/JoeyRiches.webp differ diff --git a/static/img/avatars/JustinZobel.webp b/static/img/avatars/JustinZobel.webp new file mode 100644 index 0000000000..bb3b99dac6 Binary files /dev/null and b/static/img/avatars/JustinZobel.webp differ diff --git a/static/img/avatars/MuhammadSyahrin.webp b/static/img/avatars/MuhammadSyahrin.webp new file mode 100644 index 0000000000..b667cc1a8e Binary files /dev/null and b/static/img/avatars/MuhammadSyahrin.webp differ diff --git a/static/img/avatars/ReillyBrogan.webp b/static/img/avatars/ReillyBrogan.webp new file mode 100644 index 0000000000..3cf3614e2b Binary files /dev/null and b/static/img/avatars/ReillyBrogan.webp differ diff --git a/static/img/avatars/RuneMorling.webp b/static/img/avatars/RuneMorling.webp new file mode 100644 index 0000000000..0da3c634c9 Binary files /dev/null and b/static/img/avatars/RuneMorling.webp differ diff --git a/static/img/avatars/SilkeHofstra.webp b/static/img/avatars/SilkeHofstra.webp new file mode 100644 index 0000000000..acc20c2bfb Binary files /dev/null and b/static/img/avatars/SilkeHofstra.webp differ diff --git a/static/img/avatars/ThomasStaudinger.webp b/static/img/avatars/ThomasStaudinger.webp new file mode 100644 index 0000000000..0f2906097d Binary files /dev/null and b/static/img/avatars/ThomasStaudinger.webp differ diff --git a/static/img/avatars/TraceyClark.webp b/static/img/avatars/TraceyClark.webp new file mode 100644 index 0000000000..b306e78d3b Binary files /dev/null and b/static/img/avatars/TraceyClark.webp differ diff --git a/static/img/avatars/TroyHarvey.webp b/static/img/avatars/TroyHarvey.webp new file mode 100644 index 0000000000..ffd1ab9eff Binary files /dev/null and b/static/img/avatars/TroyHarvey.webp differ diff --git a/static/img/icons/mastodon.svg b/static/img/icons/mastodon.svg new file mode 100644 index 0000000000..e03938caf5 --- /dev/null +++ b/static/img/icons/mastodon.svg @@ -0,0 +1,3 @@ + + +