Browse Source

fix many pages, add events list

James Fenn 3 months ago
8 changed files with 97 additions and 7 deletions
  1. +1
  2. +4
  3. +40
  4. +3
  5. +44
  6. +1
  7. +1
  8. +3

+ 1
- 0
package.json View File

@@ -37,6 +37,7 @@
"typescript": "^3.9.3"
"dependencies": {
"dateformat": "^4.0.0",
"isomorphic-fetch": "^2.2.1",
"marked": "^1.1.1",
"strip-indent": "^3.0.0",

+ 4
- 0
src/App.svelte View File

@@ -6,8 +6,10 @@

import Home from './routes/Home';
import About from './routes/About';
import Events from './routes/Events';
import Wiki from './routes/Wiki';
import Join from './routes/Join';
import Register from './routes/Register';

export let url = "";
@@ -25,8 +27,10 @@

<Route path="/" component={Home}/>
<Route path="/about/" component={About}/>
<Route path="/events/*page" component={Events}/>
<Route path="/wiki/*page" component={Wiki}/>
<Route path="/join/" component={Join}/>
<Route path="/register/" component={Register}/>
<footer class="footer">
<div class="container">

+ 40
- 0
src/components/Event.svelte View File

@@ -0,0 +1,40 @@
<script lang="ts">
import Markdown from './Markdown';

import dateFormat from 'dateformat';

export let data = {
id: "",
title: "",
date: "",
address: "",
description: ""

export let big = false;

{#if big}
<h1><a href="/events/{}">{data.title}</a></h1>
<h3><a href="/events/{}">{data.title}</a></h3>
<div class="text-primary">
{#if big}
<time datetime="{}">
{dateFormat(, 'dddd, mmmm dS, yyyy')}
@ {dateFormat(, 'h:MM TT')}
<time datetime="{}">{dateFormat(, 'dddd, mmmm dS, yyyy @ h:MM TT')}</time>
<span style="font-size: 0.9em; opacity: 0.8;">{@html data.address.replace(/\n/g, big ? '<br>' : ', ')}</span>
<Markdown content={data.description} />


+ 3
- 5
src/routes/About.svx View File

@@ -1,10 +1,8 @@
# What is
## What is

**** is a collective organization of individual developers and enthusiasts with a focus on independent services, software, and technology. We advocate for open code, ethical computing, and tools that you control.

[TODO: err, expand on this a little]

# What's up with the name?
## What's up with the name?'s identity is derived from a common mindset shared by many of our members: namely, a perception of software development as a perpetually imperfect pursuit - and the idea that, sometimes, failure is okay.

@@ -14,6 +12,6 @@ The way that most software is perceived is subjective - there is no universal so

In many ways, aiming for perfection caters to the majority. It implies a disregard of issues in a minor context, and makes decisions to suit a larger scope. To some extent, this priority is inevitable, as we've already established that nothing can be perfect. In implementation, though, it means that a lot of software is built and designed for "most people". It's built with most people in mind, so that the product is used by the most customers and gains the most profit. It's built for everyone, and the outcome is perfect for no one.

# What is our Code of Conduct?
## What is our Code of Conduct?

We have adopted a modified version of the [Contributor Covenant](, which can be found [here](/wiki/Code-of-Conduct).

+ 44
- 0
src/routes/Events.svx View File

@@ -0,0 +1,44 @@
<script lang="ts">
import Event from '../components/Event';

const events = [{
"id": "02-14-2020",
"title": "Personal Website Hack Session",
"location": "Pittsburgh",
"address": "The Big Idea Bookstore\n4812 Liberty Ave\nPittsburgh, PA 15224",
"date": "2020-02-14T15:30:00",
"description": "Open to everyone! We'll be spending time relaxing and working on our personal websites. Pittsburgh doesn't appear to have a [Homebrew Website Club]( yet, but that might be something we could start if people are interested in this sort of thing."
"id": "02-07-2020",
"title": "HorrificDev Planning Meeting",
"location": "Pittsburgh",
"address": "Redhawk Coffee\n120 Meyran Avenue\nPittsburgh, PA 15213",
"date": "2020-02-07T15:00:00",
"description": "A meeting to plan work on the [aight documentary](, discuss deployment of the atrocious server, and to enjoy both caffeinated beverages and the company of good friends."

const upcomingEvents = events.filter(() => false);
const pastEvents = events.filter(() => true);

export let page = "";

{#if page}
{#each events as event}
{#if == page}
<Event data={event} big={true} />
<h1>Upcoming Events...</h1>
{#each upcomingEvents as event}
<Event data={event}/>
<p>There are no planned events at this time. Check back later!</p>

<h1>Past Events...</h1>
{#each pastEvents as event}
<Event data={event}/>

+ 1
- 1
src/routes/Home.svx View File

@@ -17,7 +17,7 @@ We are working on getting a [hosting service](/wiki/Timeframe) running, as well

The organization needs some general maintenance. We now have a page on [Open Collective]( to manage and track expenses. We need to connect social media accounts to a central "mailing list" (which is waiting on the server before it can be set up). We also need to put some work into more clearly defining our values as a group.

Depending on our members having free time, we have [semi-regular meetings](/events/) in Pittsburgh, PA where we drink tea and discuss software projects and current events.
Depending on our members having free time, we will have [semi-regular meetings](/events/) where we drink tea and discuss software projects and current events.

## Get Involved

+ 1
- 1
src/routes/Join.svx View File

@@ -9,7 +9,7 @@
items: [
"Gitea Repository Hosting",
"Mastodon Account [](",
"Minecraft Server Access"
"Discord Server Access"
action: {
title: "Sign Up",

+ 3
- 0
src/routes/Register.svx View File

@@ -0,0 +1,3 @@
# Registration

Our registration process isn't quite finished yet - please check back later!