+
+
+
+
+ Triston Armstrong
+Full Stack Software Developer @ VentraHealth
+ +I am a self taught Full Stack Software Developer with an unhealthy addiction to solving + problems using code.
+ +Skills
+
+
+
+ Jobs
+
+
+
+ Personal Projects
+
+
+
+
+ Notes
+An endless trail of links to my personal notes
+ note +
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..3e55c02
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+ Triston Armstrong Portfolio
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/scripts/jobs.js b/public/scripts/jobs.js
new file mode 100644
index 0000000..6263d4f
--- /dev/null
+++ b/public/scripts/jobs.js
@@ -0,0 +1,78 @@
+(() => {
+ class Job {
+ logo;
+ name;
+ details;
+ code;
+ dateFrom;
+ dateTo;
+
+ constructor(logo, name, details, dateFrom, dateTo) {
+ this.logo = logo
+ this.name = name
+ this.details = details
+ this.dateFrom = dateFrom
+ this.dateTo = dateTo
+ }
+
+ _build() {
+ return `
+
+
+
+
+
+
+ Triston Armstrong
+Full Stack Software Developer @ VentraHealth
+ +I am a self taught Full Stack Software Developer with an unhealthy addiction to solving + problems using code.
+ +Skills
+
+
+
+ Jobs
+
+
+
+ Personal Projects
+
+
+
+
+ Notes
+An endless trail of links to my personal notes
+ note + NOTES +
+
+ `
+ }
+
+ show() {
+ const container = document.createElement('div')
+ container.classList = "flex items-center gap-x-3 border rounded-xl w-full p-2 bg-gray-200"
+ container.innerHTML = this._build()
+ return container
+ }
+ }
+
+ // details
+ const data = [
+ {
+ logo: 'https://ventrahealth.com/wp-content/uploads/2023/08/cropped-Ventra-Health-favicon-circle-192x192.png',
+ name: 'Ventra Health',
+ details: 'Maintaining and iterating on an internal web application',
+ dateFrom: "May 2023",
+ dateTo: "Present"
+ }, {
+ logo: 'https://www.randstadusa.com/themes/custom/bluex/favicon.ico',
+ name: 'Randstad Technologies',
+ details: 'Built Web Applications for external clients',
+ dateFrom: "May 2022",
+ dateTo: "May 2023"
+
+ }, {
+ logo: 'https://img1.wsimg.com/isteam/ip/9ba626a3-41c9-4092-90b5-cb351983b726/favicon/a8beec51-e35d-4cca-8e88-befa12f687b0.png/:/rs=w:64,h:64,m',
+ name: 'Damiano Global Corporation',
+ details: 'Built Web Applications for external clients',
+ dateFrom: "July 2020",
+ dateTo: "Nov 2021"
+
+ }, {
+ logo: '#',
+ name: 'Makers Ladder LLC',
+ details: 'Did some thangs',
+ dateFrom: "Dec 2019",
+ dateTo: "Apr 2022"
+
+ },
+ ]
+
+ // Showings
+ const jobsSection = document.getElementById('jobs')
+
+ data.forEach(job => {
+ const j = new Job(job.logo, job.name, job.details, job.dateFrom, job.dateTo)
+ jobsSection.appendChild(j.show())
+ })
+})()
diff --git a/public/scripts/projects.js b/public/scripts/projects.js
new file mode 100644
index 0000000..be34936
--- /dev/null
+++ b/public/scripts/projects.js
@@ -0,0 +1,52 @@
+(() => {
+ class Project {
+ label; date; url;
+ constructor(label, date, url) {
+ this.label = label;
+ this.date = date;
+ this.url = url;
+ }
+
+ _build() {
+ return `
+
+ ${this.name}
+ ${this.dateFrom} - ${this.dateTo}
+
+ ${this.details}
+ ${this.label}
+ +
+ ${this.date}
+
+
+
+
+ `
+ }
+ show() {
+ const container = document.createElement('div')
+ container.classList = `flex flex-row items-baseline justify-between gap-2`
+ container.innerHTML = this._build()
+ return container
+ }
+ }
+
+ const data = [
+ { label: "Web Window Manager", date: new Date("9/18/2022"), url: "https://github.com/tristonarmstrong/web-window-manager" },
+ { label: "Component Test Helper", date: new Date("6/18/2022"), url: "https://github.com/tristonarmstrong/component-test-helper" },
+ { label: "Hive DAPP", date: new Date("3/8/2022"), url: "https://github.com/tristonarmstrong/hive-dapp" },
+ { label: "Kivy Twisted Input Capture", date: new Date("6/27/2021"), url: "https://github.com/tristonarmstrong/KivyTwistedInputCapture" },
+ { label: "Plant Monitor Node MCU", date: new Date("6/27/2021"), url: "https://github.com/tristonarmstrong/PlantMonitorNodeMCU" },
+ { label: "Oppo BDP 103 CLI", date: new Date("4/10/2021"), url: "https://github.com/tristonarmstrong/oppo_bdp_103_CLI" },
+ { label: "Sony Bravia Pro Server", date: new Date("4/10/2021"), url: "https://github.com/tristonarmstrong/sony_bravia_pro_display_mock_server" },
+ { label: "Chat IO", date: new Date("6/10/2020"), url: "https://github.com/tristonarmstrong/chat.io" },
+ { label: "Solar Battery Monitor API", date: new Date("7/18/2023"), url: "https://github.com/tristonarmstrong/SolarBatteryMonitorApi" },
+ { label: "Zip Code Distance App", date: new Date("1/28/2020"), url: "https://github.com/tristonarmstrong/zipapp" },
+ { label: "Armstrong Editor", date: new Date("12/14/2022"), url: "https://github.com/tristonarmstrong/armstrong-editor" },
+ ]
+
+ const container = document.getElementById('projects')
+ data.sort((a, b) => b.date - a.date).forEach(
+ p => container.appendChild(new Project(p.label, p.date.toDateString(), p.url).show())
+ )
+})()
diff --git a/public/scripts/skills.js b/public/scripts/skills.js
new file mode 100644
index 0000000..9f6e8c6
--- /dev/null
+++ b/public/scripts/skills.js
@@ -0,0 +1,30 @@
+(() => {
+ class Skill {
+ label;
+ color;
+ constructor(label, color) {
+ this.label = label
+ this.color = color
+ }
+
+ _build() {
+ return `${this.label}`
+ }
+ show() {
+ const container = document.createElement('div')
+ container.classList = `bg-${this.color} text-white rounded-xl px-2 py-1 text-xs`
+ container.innerHTML = this._build()
+ return container
+ }
+ }
+
+ const data = [
+ { label: "Typescript", color: "blue-500" },
+ { label: "Python", color: "green-800" },
+ { label: "Rust", color: "yellow-800" },
+ { label: "Javascript", color: "yellow-500" },
+ ]
+
+ const container = document.getElementById('skills')
+ data.forEach(skill => container.appendChild(new Skill(skill.label, skill.color).show()))
+})()