Compare commits
2 Commits
279a508d61
...
4852f100a3
Author | SHA1 | Date |
---|---|---|
|
4852f100a3 | |
|
0b8f76b604 |
|
@ -0,0 +1,122 @@
|
|||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-block-end: 0.25em;
|
||||
margin-bottom: 0.25em;
|
||||
border-block-end: 0.0625em solid currentColor;
|
||||
border-bottom: 0.0625em solid currentColor;
|
||||
font-variant: small-caps;
|
||||
}
|
||||
|
||||
.headline {
|
||||
margin-block-end: 1em;
|
||||
margin-bottom: 1em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-block-end: 1em;
|
||||
margin-bottom: 1em;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5em;
|
||||
}
|
||||
|
||||
address>ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
address> :last-child {
|
||||
text-align: end;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
hr {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
main > section+section,
|
||||
article+article {
|
||||
margin-block-start: 1em;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
article>article {
|
||||
margin-block-start: 0.5em;
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
article header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5em;
|
||||
}
|
||||
|
||||
article header p {
|
||||
text-align: end;
|
||||
}
|
||||
|
||||
article > p {
|
||||
margin-block-start: 0.25em;
|
||||
margin-top: 0.25em;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-inline-start: 2.5em;
|
||||
margin-left: 2.5em;
|
||||
}
|
||||
|
||||
#skills h3 {
|
||||
margin-block-start: 0.25em;
|
||||
margin-top: 0.25em;
|
||||
}
|
||||
|
||||
#skills ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
#skills li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#skills li::after {
|
||||
content: ",";
|
||||
}
|
||||
|
||||
#skills li:last-child::after {
|
||||
content: none;
|
||||
}
|
||||
|
||||
footer {
|
||||
text-align: center;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
@page {
|
||||
size: 8.5in 11in;
|
||||
margin: 0.5in;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body { margin: 0; }
|
||||
|
||||
article,
|
||||
footer {
|
||||
break-inside: avoid-page;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: blue;
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
body {
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
main {
|
||||
margin: 0 auto;
|
||||
max-width: 50em;
|
||||
}
|
|
@ -0,0 +1,283 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cv>
|
||||
<work-history>
|
||||
<company>
|
||||
<name>edX</name>
|
||||
<role>
|
||||
<title>Full-Stack Bootcamp Teaching Assistant</title>
|
||||
<duration>
|
||||
<start datetime="2021-06">June 2021</start>
|
||||
</duration>
|
||||
<description>
|
||||
<p>
|
||||
As a teaching assistant, I am responsible for
|
||||
fielding student questions before, during, and after
|
||||
lectures; I also serve as a substitute instructor
|
||||
when required. I have worked with hundreds of
|
||||
students from various backgrounds, explaining
|
||||
everything from for loops to full-stack deployment.
|
||||
After spending thousands of hours assisting
|
||||
learners, I have a deep knowledge of current front-
|
||||
and back-end technologies, frameworks, and
|
||||
libraries.
|
||||
</p>
|
||||
</description>
|
||||
</role>
|
||||
<role>
|
||||
<title>Senior Tutor</title>
|
||||
<duration>
|
||||
<start datetime="2021-10">October 2021</start>
|
||||
</duration>
|
||||
<description>
|
||||
<p>
|
||||
I was recognised as a sought-after, highly effective
|
||||
tutor to recieve this title. I worked around the
|
||||
busy schedules of our students, helping them build
|
||||
individualised learning patterns, and I explained
|
||||
industry best practices for full-stack developers
|
||||
through the lens of their existing knowledge.
|
||||
</p>
|
||||
</description>
|
||||
</role>
|
||||
</company>
|
||||
<company>
|
||||
<name>Sixfold</name>
|
||||
<role>
|
||||
<title>Publisher & Maintainer</title>
|
||||
<duration>
|
||||
<start datetime="2024-05">May 2024</start>
|
||||
</duration>
|
||||
<description>
|
||||
<p>
|
||||
<i>Sixfold</i> is a writer-voted journal of poetry and
|
||||
short stories. I am in charge of the publication's
|
||||
website and overall digital presence.
|
||||
</p>
|
||||
<p>
|
||||
I took over the maintenance of this 11-year-old PHP site and split it in two: a static Eleventy site presents old
|
||||
issues, contest instructions, and digital publishing
|
||||
guides for the more than 9,000 monthly visitors, and
|
||||
a rebuilt PHP site is responsible for running the
|
||||
quarterly contests for our thirty-one thousand
|
||||
members. Both sites were migrated from Amazon Web
|
||||
Services to a basic Linode server, decreasing
|
||||
monthly costs by more than fifty times. This single
|
||||
five-dollar server also runs a Forgejo instance that
|
||||
hosts the source code for both sites. I edit,
|
||||
proofread, and publish both the digital and print
|
||||
publications.
|
||||
</p>
|
||||
</description>
|
||||
</role>
|
||||
</company>
|
||||
<company>
|
||||
<name>Public Offering</name>
|
||||
<role>
|
||||
<title>Founder and Infrastructure Engineer</title>
|
||||
<duration>
|
||||
<start datetime="2022-11">November 2022</start>
|
||||
</duration>
|
||||
<description>
|
||||
<p>
|
||||
Public Offering is the not-for-profit digital services
|
||||
organisation I created to help build a better web.
|
||||
</p>
|
||||
<p>
|
||||
I worked with interested individuals to build
|
||||
static, performant, multilingual websites that
|
||||
showcased their personality. These sites are edited
|
||||
with a bespoke, open-source CMS that gets out of
|
||||
their way. I built the CMS to gain a better
|
||||
understanding of how they worked, and to implement
|
||||
features that currently available applications did
|
||||
not yet have, such as a multilingual media library,
|
||||
responsive editor design, and non-image media items.
|
||||
It also utilises a custom, dependency-free router I
|
||||
wrote for the core Node HTTP server. We also offer
|
||||
an invite-only Forgejo instance and a public
|
||||
Etherpad instance.
|
||||
</p>
|
||||
</description>
|
||||
</role>
|
||||
</company>
|
||||
<company>
|
||||
<name>Leibowitz Branding & Design</name>
|
||||
<role>
|
||||
<title>Full-Stack Developer and Accessibility Specialist</title>
|
||||
<duration>
|
||||
<start datetime="2022-09">September 2022</start>
|
||||
<end datetime="2023-05">May 2023</end>
|
||||
</duration>
|
||||
<description>
|
||||
<p>
|
||||
After regularly advocating for accessible design
|
||||
processes, I was given a promotion that emphasised
|
||||
this work. I performed detailed accessibility audits
|
||||
for our existing clients using skills from my
|
||||
Trusted Tester certification. I presented concise,
|
||||
prioritised accessibility reports with
|
||||
citations and clear remediation steps. My new role
|
||||
also involved working with account mangers to
|
||||
improve the agency's information architecture and
|
||||
simplify inter-department communication.
|
||||
</p>
|
||||
</description>
|
||||
</role>
|
||||
<role>
|
||||
<title>Developer</title>
|
||||
<duration>
|
||||
<start datetime="2021-05">May 2021</start>
|
||||
<end datetime="2022-09">September 2022</end>
|
||||
</duration>
|
||||
<description>
|
||||
<p>
|
||||
I came on as the sole in-house developer and
|
||||
immediately took charge of the agency's dozens of
|
||||
client sites, performing regular maintenance of
|
||||
plugins and third-party data feeds. After gaining
|
||||
familiarity with their work, I began introducing
|
||||
accessible design principles onto our design
|
||||
process, working with our designers to catch
|
||||
accessibility issues before the development phase.
|
||||
</p>
|
||||
</description>
|
||||
</role>
|
||||
</company>
|
||||
<company>
|
||||
<name>Freelance Work</name>
|
||||
<role>
|
||||
<title>Various International Digital Works</title>
|
||||
<duration>
|
||||
<start datetime="2018-09">September 2018</start>
|
||||
</duration>
|
||||
<description>
|
||||
<p>
|
||||
I have worked with theater companies, non-profits,
|
||||
and creative individuals with unique digital ideas.
|
||||
These word-of-mouth commissions have allowed me to
|
||||
travel to various countries, participate in
|
||||
festivals, engage with new technologies, and form
|
||||
invaluable friendships. The remote portion of this
|
||||
work involved communicating across various mediums
|
||||
and time zones with both clients and testers.
|
||||
</p>
|
||||
</description>
|
||||
</role>
|
||||
</company>
|
||||
</work-history>
|
||||
<foss-contributions>
|
||||
<project>
|
||||
<name>GoAccess</name>
|
||||
<activity>Contributor</activity>
|
||||
<description>
|
||||
<p>
|
||||
I refactored the generated log reports to use semantic
|
||||
HTML, improving accessibility and simplifying
|
||||
maintenance. I also began replacing outdated
|
||||
dependencies with native browser alternatives to
|
||||
decrease report sizes and close years-old issues.
|
||||
</p>
|
||||
</description>
|
||||
</project>
|
||||
<project>
|
||||
<name>ProseMirror</name>
|
||||
<activity>Plugin Developer, Forum Participant</activity>
|
||||
<description>
|
||||
<p>
|
||||
I've published four ProseMirror plugins—a document
|
||||
outline, a semantic editing menu, a node insertion menu,
|
||||
and a node inspector—to simplify more complex document
|
||||
manipulation tasks.
|
||||
</p>
|
||||
</description>
|
||||
</project>
|
||||
</foss-contributions>
|
||||
<education>
|
||||
<institution>
|
||||
<name>New York University</name>
|
||||
<degree>
|
||||
<level>Bachelor of Fine Arts</level>
|
||||
<concentration>Theatre</concentration>
|
||||
<awarded>2020-12</awarded>
|
||||
<distinction>Magna cum laude</distinction>
|
||||
<distinction>Tisch School of the Arts Dean’s List</distinction>
|
||||
</degree>
|
||||
<degree>
|
||||
<level>Minor</level>
|
||||
<concentration>Web Programming and Applications</concentration>
|
||||
<awarded>2020-12</awarded>
|
||||
</degree>
|
||||
</institution>
|
||||
</education>
|
||||
<skills>
|
||||
<category>
|
||||
<name>Certifications</name>
|
||||
<item>Section 508: DHS Trusted Tester</item>
|
||||
</category>
|
||||
<category>
|
||||
<name>Languages</name>
|
||||
<item>(X)HTML</item>
|
||||
<item>XML</item>
|
||||
<item>XSLT</item>
|
||||
<item>CSS</item>
|
||||
<item>JavaScript</item>
|
||||
<item>PHP</item>
|
||||
<item>Python</item>
|
||||
<item>Go</item>
|
||||
<item>SQL/MySQL/PostgreSQL</item>
|
||||
<item>NoSQL</item>
|
||||
</category>
|
||||
<category>
|
||||
<name>Operating Systems</name>
|
||||
<item>Ubuntu Linux</item>
|
||||
<item>Microsoft Windows</item>
|
||||
<item>MacOS</item>
|
||||
<item>Arch Linux</item>
|
||||
</category>
|
||||
<category>
|
||||
<name>Programs</name>
|
||||
<item>Vim</item>
|
||||
<item>Git</item>
|
||||
<item>Bash</item>
|
||||
<item>Inkscape</item>
|
||||
<item>Figma</item>
|
||||
<item>Adobe Creative Cloud</item>
|
||||
<item>Unity</item>
|
||||
<item>Final Cut</item>
|
||||
</category>
|
||||
<category>
|
||||
<name>Frameworks, Libraries, and Tools</name>
|
||||
<item>Web Content Accessibility Guidelines (WCAG)</item>
|
||||
<item>htmx</item>
|
||||
<item>Web Components</item>
|
||||
<item>WebRTC</item>
|
||||
<item>static-site generators</item>
|
||||
<item>content management systems</item>
|
||||
<item>EPUB</item>
|
||||
<item>Node.js</item>
|
||||
<item>Bootstrap</item>
|
||||
<item>Tailwind</item>
|
||||
<item>SSH</item>
|
||||
<item>SMTP</item>
|
||||
<item>nginx</item>
|
||||
<item>Apache</item>
|
||||
<item>Open Graph</item>
|
||||
<item>React/Redux</item>
|
||||
<item>TypeScript</item>
|
||||
<item>Electron</item>
|
||||
<item>Svelte</item>
|
||||
<item>Cypress</item>
|
||||
<item>Jest</item>
|
||||
<item>Docker</item>
|
||||
<item>Vonage/Nexmo</item>
|
||||
</category>
|
||||
<category>
|
||||
<name>Miscellaneous</name>
|
||||
<item>Database administration</item>
|
||||
<item>Server upkeep</item>
|
||||
<item>UI/UX</item>
|
||||
<item>Captioning</item>
|
||||
<item>Transcription</item>
|
||||
</category>
|
||||
</skills>
|
||||
</cv>
|
|
@ -0,0 +1,132 @@
|
|||
<?xml version="1.0"?>
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" standalone="yes" doctype-system="about:legacy-compat" />
|
||||
<xsl:param name="title" select="'Ainsley Ellis CV'"/>
|
||||
<xsl:template name="company">
|
||||
<article>
|
||||
<h3><xsl:value-of select="./name/text()"/></h3>
|
||||
<xsl:for-each select="./role">
|
||||
<xsl:call-template name="role"/>
|
||||
</xsl:for-each>
|
||||
</article>
|
||||
</xsl:template>
|
||||
<xsl:template name="project">
|
||||
<article>
|
||||
<header>
|
||||
<h3><xsl:value-of select="./name/text()" /></h3>
|
||||
<p>
|
||||
<xsl:value-of select="./activity/text()" />
|
||||
</p>
|
||||
</header>
|
||||
<xsl:copy-of select="./description/node()" />
|
||||
</article>
|
||||
</xsl:template>
|
||||
<xsl:template name="institution">
|
||||
<article>
|
||||
<h3><xsl:value-of select="./name/text()" /></h3>
|
||||
<dl>
|
||||
<xsl:for-each select="./degree">
|
||||
<dt><xsl:value-of select="./level/text()" /> in <xsl:value-of select="./concentration/text()" /></dt>
|
||||
<xsl:for-each select="./distinction">
|
||||
<dd><xsl:value-of select="./text()" /></dd>
|
||||
</xsl:for-each>
|
||||
</xsl:for-each>
|
||||
</dl>
|
||||
</article>
|
||||
</xsl:template>
|
||||
<xsl:template name="skill-category">
|
||||
<section>
|
||||
<h3><xsl:value-of select="./name/text()" /></h3>
|
||||
<ul role="list">
|
||||
<xsl:for-each select="./item">
|
||||
<li><xsl:value-of select="./text()" /></li>
|
||||
</xsl:for-each>
|
||||
</ul>
|
||||
</section>
|
||||
</xsl:template>
|
||||
<xsl:template name="role">
|
||||
<article>
|
||||
<header>
|
||||
<h4><xsl:value-of select="./title/text()" /></h4>
|
||||
<p>
|
||||
<time>
|
||||
<xsl:attribute name="datetime">
|
||||
<xsl:value-of select="./duration/start[@datetime]" />
|
||||
</xsl:attribute>
|
||||
<xsl:value-of select="./duration/start/text()" />
|
||||
</time>
|
||||
to
|
||||
<xsl:choose>
|
||||
<xsl:when test="./duration/end">
|
||||
<time>
|
||||
<xsl:attribute name="datetime">
|
||||
<xsl:value-of select="./duration/end[@datetime]" />
|
||||
</xsl:attribute>
|
||||
<xsl:value-of select="./duration/end/text()" />
|
||||
</time>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>Present</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</p>
|
||||
</header>
|
||||
<xsl:copy-of select="./description/node()" />
|
||||
</article>
|
||||
</xsl:template>
|
||||
<xsl:template match="/cv" data-xmlns="http://www.w3.org/1999/xhtml">
|
||||
<html lang="en" dir="ltr">
|
||||
<!-- The Yesterweb is dead, long live the Yesterweb! -->
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<title><xsl:value-of select="$title"/></title>
|
||||
<link rel="stylesheet" href="../assets/css/all.css" />
|
||||
<link rel="stylesheet" href="../assets/css/screen.css" media="screen" />
|
||||
<link rel="stylesheet" href="../assets/css/print.css" media="print" />
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<xsl:copy-of select="document('./fragments/header.xml')"/>
|
||||
<!-- <xsl:copy-of select="/cv"/> -->
|
||||
<section id="objective">
|
||||
<h2>Objective</h2>
|
||||
<!-- select specific objective from xml file -->
|
||||
<xsl:copy-of select="document('./fragments/objectives.xml')/objectives/objective[@name='web-development']/node()"/>
|
||||
</section>
|
||||
<section id="work-history">
|
||||
<h2>Work History</h2>
|
||||
<xsl:for-each select="./work-history/company">
|
||||
<xsl:call-template name="company"/>
|
||||
</xsl:for-each>
|
||||
</section>
|
||||
<section id="open-source-contributions">
|
||||
<h2>Open-source Contributions</h2>
|
||||
<xsl:for-each select="./foss-contributions/project">
|
||||
<xsl:call-template name="project"/>
|
||||
</xsl:for-each>
|
||||
</section>
|
||||
<section id="education">
|
||||
<h2>Education</h2>
|
||||
<xsl:for-each select="./education/institution">
|
||||
<xsl:call-template name="institution"/>
|
||||
</xsl:for-each>
|
||||
</section>
|
||||
<section id="skills">
|
||||
<h2>Skills</h2>
|
||||
<xsl:for-each select="./skills/category">
|
||||
<xsl:call-template name="skill-category"/>
|
||||
</xsl:for-each>
|
||||
</section>
|
||||
</main>
|
||||
<hr/>
|
||||
<xsl:if test="$hash">
|
||||
<footer>
|
||||
<p>
|
||||
<small>Built with XSLT (<a>
|
||||
<xsl:attribute name="href">https://git.pub0.org/heyainsleymae/curriculum-vitae/src/commit/<xsl:value-of select="$hash" /></xsl:attribute>view commit</a>)</small></p>
|
||||
</footer>
|
||||
</xsl:if>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<header>
|
||||
<h1>Ainsley Ellis</h1>
|
||||
<p class="headline">Artist, Programmer, Digital Citizen</p>
|
||||
<address>
|
||||
<ul role="list">
|
||||
<li>Email: <a href="mailto:ainsleymae@proton.me">Ainsley Ellis <ainsleymae@proton.me></a>
|
||||
</li>
|
||||
<li>Website: <a href="https://ains.me">ains.me</a></li>
|
||||
<li>
|
||||
<code>heyainsleymae</code> on <a href="https://codeberg.org/heyainsleymae">Codeberg</a>, <a href="https://github.com/heyainsleymae">GitHub</a>, and <a href="https://npmjs.com/~heyainsleymae">npm</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p>America/New_York (NYC)<br />Remote or hybrid work, open to relocation</p>
|
||||
</address>
|
||||
</header>
|
|
@ -0,0 +1,14 @@
|
|||
<objectives>
|
||||
<objective name="web-development">
|
||||
<p>
|
||||
I am an accomplished full-stack developer with a passion for
|
||||
accessibility and open web standards. I have experience building large, scalable
|
||||
projects from scratch, improving internal processes and
|
||||
design systems, and mentoring junior engineers. I hold a
|
||||
<b>Section 508 Trusted Tester</b> certification from the United
|
||||
States Department of Homeland Security. I want to work with a
|
||||
diverse team to build accessible products that entertain,
|
||||
inform, or assist the public.
|
||||
</p>
|
||||
</objective>
|
||||
</objectives>
|
Loading…
Reference in New Issue