Added resume and developer pages.
This commit is contained in:
parent
ad55d30a73
commit
eff03cfd43
@ -10,18 +10,15 @@ import jakarta.inject.Named
|
||||
class Header extends BaseWebViewComponent {
|
||||
|
||||
final String siteName
|
||||
final String siteTagLine
|
||||
final List<Page> menuItems
|
||||
|
||||
@Inject
|
||||
Header(
|
||||
@Named('siteName') String siteName,
|
||||
@Global('siteTagLine') String siteTagLine,
|
||||
@Global('menuItems') List<String> menuItems,
|
||||
@InjectPages('/*') Set<Page> allPages
|
||||
) {
|
||||
this.siteName = siteName
|
||||
this.siteTagLine = siteTagLine
|
||||
this.menuItems = menuItems.collect { menuItem ->
|
||||
allPages.find { it.name == menuItem }
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ import com.jessebrault.site.icon.BarsIcon
|
||||
<header id="header">
|
||||
<div class="titles">
|
||||
<h1>$siteName</h1>
|
||||
<h2>$siteTagLine</h2>
|
||||
</div>
|
||||
<nav>
|
||||
<button id="nav-bars" class="bars-wrapper">
|
||||
|
@ -0,0 +1,38 @@
|
||||
package com.jessebrault.site.developer
|
||||
|
||||
import com.jessebrault.site.util.TitleMaker
|
||||
import com.jessebrault.ssg.di.InjectText
|
||||
import com.jessebrault.ssg.di.SelfPage
|
||||
import com.jessebrault.ssg.page.Page
|
||||
import com.jessebrault.ssg.page.PageSpec
|
||||
import com.jessebrault.ssg.text.Text
|
||||
import com.jessebrault.ssg.view.WvcPageView
|
||||
import jakarta.inject.Inject
|
||||
|
||||
@PageSpec(name = 'Developer', path = '/developer')
|
||||
class DeveloperPage extends WvcPageView {
|
||||
|
||||
final Text developer
|
||||
final Page selfPage
|
||||
private final TitleMaker titleMaker
|
||||
|
||||
@Inject
|
||||
DeveloperPage(
|
||||
@InjectText('/Developer.md') Text developer,
|
||||
@SelfPage Page selfPage,
|
||||
TitleMaker titleMaker
|
||||
) {
|
||||
this.developer = developer
|
||||
this.selfPage = selfPage
|
||||
this.titleMaker = titleMaker
|
||||
}
|
||||
|
||||
String getTitle() {
|
||||
titleMaker.makeTitle(pageTitle)
|
||||
}
|
||||
|
||||
String getDescription() {
|
||||
developer.frontMatter.description
|
||||
}
|
||||
|
||||
}
|
34
pages/groovy/com/jessebrault/site/resume/ResumePage.groovy
Normal file
34
pages/groovy/com/jessebrault/site/resume/ResumePage.groovy
Normal file
@ -0,0 +1,34 @@
|
||||
package com.jessebrault.site.resume
|
||||
|
||||
import com.jessebrault.site.util.TitleMaker
|
||||
import com.jessebrault.ssg.di.InjectText
|
||||
import com.jessebrault.ssg.di.SelfPage
|
||||
import com.jessebrault.ssg.page.Page
|
||||
import com.jessebrault.ssg.page.PageSpec
|
||||
import com.jessebrault.ssg.text.Text
|
||||
import com.jessebrault.ssg.view.WvcPageView
|
||||
import jakarta.inject.Inject
|
||||
|
||||
@PageSpec(name = 'Résumé', path = '/resume')
|
||||
class ResumePage extends WvcPageView {
|
||||
|
||||
final Text resume
|
||||
final Page selfPage
|
||||
private final TitleMaker titleMaker
|
||||
|
||||
@Inject
|
||||
ResumePage(@InjectText('/Resume.md') Text resume, TitleMaker titleMaker, @SelfPage Page selfPage) {
|
||||
this.resume = resume
|
||||
this.titleMaker = titleMaker
|
||||
this.selfPage = selfPage
|
||||
}
|
||||
|
||||
String getTitle() {
|
||||
titleMaker.makeTitle(pageTitle)
|
||||
}
|
||||
|
||||
String getDescription() {
|
||||
resume.frontMatter.description
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
---
|
||||
package com.jessebrault.site.developer
|
||||
|
||||
import com.jessebrault.site.StandardPage
|
||||
import com.jessebrault.site.util.OpenGraph
|
||||
---
|
||||
<StandardPage
|
||||
title={title}
|
||||
description={description}
|
||||
openGraph={<OpenGraph
|
||||
title={pageTitle}
|
||||
description={description}
|
||||
path={selfPage.path}
|
||||
/>}
|
||||
>
|
||||
<div class="article-container">
|
||||
<article id="developer-article">
|
||||
<Render item={developer} />
|
||||
</article>
|
||||
</div>
|
||||
</StandardPage>
|
@ -0,0 +1,21 @@
|
||||
---
|
||||
package com.jessebrault.site.resume
|
||||
|
||||
import com.jessebrault.site.StandardPage
|
||||
import com.jessebrault.site.util.OpenGraph
|
||||
---
|
||||
<StandardPage
|
||||
title={title}
|
||||
description={description}
|
||||
openGraph={<OpenGraph
|
||||
title={pageTitle}
|
||||
description={description}
|
||||
path={selfPage.path}
|
||||
/>}
|
||||
>
|
||||
<div class="article-container">
|
||||
<article id="resume-article">
|
||||
<Render item={resume} />
|
||||
</article>
|
||||
</div>
|
||||
</StandardPage>
|
@ -14,7 +14,7 @@ build {
|
||||
basePackage 'com.jessebrault.site'
|
||||
globals {
|
||||
siteTagLine = 'Conductor, Composer, Developer'
|
||||
menuItems = ['Biography', 'Compositions', 'Videos', 'Lessons', 'Contact']
|
||||
menuItems = ['Biography', 'Compositions', 'Videos', 'Lessons', 'Résumé', 'Developer', 'Contact']
|
||||
compositionCategories = ['Orchestra', 'Chamber', 'Solo', 'Wind Ensemble']
|
||||
spotifyUrl = 'https://open.spotify.com/artist/4ea1gZnLlQTrXKIMsnlr45?si=DfR-KCDyTiycbjmYwu566w'
|
||||
youtubeUrl = 'https://www.youtube.com/@JesseBrault0709'
|
||||
|
@ -50,10 +50,6 @@ header .titles h1 {
|
||||
letter-spacing: 0.1em;
|
||||
}
|
||||
|
||||
header .titles h2 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
nav .bars-wrapper {
|
||||
background: none;
|
||||
padding: 0;
|
||||
@ -481,13 +477,6 @@ form.contact {
|
||||
padding-inline: 30px;
|
||||
}
|
||||
|
||||
header .titles h2 {
|
||||
display: unset;
|
||||
font-size: 2em;
|
||||
font-size: 18px;
|
||||
letter-spacing: 0.15em;
|
||||
}
|
||||
|
||||
.banner,
|
||||
.landscape-banner {
|
||||
flex-direction: unset;
|
||||
@ -569,22 +558,6 @@ form.contact {
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1023px) {
|
||||
nav ul {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
width: 100%;
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
row-gap: 10px;
|
||||
padding: 20px;
|
||||
background-color: var(--petrol);
|
||||
border-bottom: 1px solid var(--charcoal);
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1024px) {
|
||||
header {
|
||||
align-items: center;
|
||||
@ -596,18 +569,6 @@ form.contact {
|
||||
letter-spacing: 0.175em;
|
||||
}
|
||||
|
||||
header .titles h2 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
nav .bars-wrapper {
|
||||
display: none;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.banner,
|
||||
.landscape-banner {
|
||||
padding: 0 50px 50px;
|
||||
@ -644,9 +605,29 @@ form.contact {
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1199px) {
|
||||
nav ul {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
width: 100%;
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
row-gap: 10px;
|
||||
padding: 20px;
|
||||
background-color: var(--petrol);
|
||||
border-bottom: 1px solid var(--charcoal);
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1200px) {
|
||||
header .titles h2 {
|
||||
display: unset;
|
||||
nav .bars-wrapper {
|
||||
display: none;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.contact-banner svg {
|
||||
|
@ -15,7 +15,7 @@ window.addEventListener('load', () => {
|
||||
const navItems = document.getElementById('nav-items')
|
||||
|
||||
const toggleMenu = () => {
|
||||
if (window.matchMedia('screen and (max-width: 1023px)').matches) {
|
||||
if (window.matchMedia('screen and (max-width: 1199px)').matches) {
|
||||
if (navItems.style.display === 'flex') {
|
||||
navItems.style.display = 'none'
|
||||
} else {
|
||||
|
@ -1,6 +1,6 @@
|
||||
const addResourcesToCache = async () => {
|
||||
const cache = await caches.open('v1')
|
||||
cache.addAll(['/', '/compositions', '/videos', '/lessons', '/contact'])
|
||||
cache.addAll(['/', '/compositions', '/videos', '/lessons', '/resume', '/developer', '/contact'])
|
||||
;[
|
||||
'https://jessebrault.nyc3.cdn.digitaloceanspaces.com/images/portrait1.jpg',
|
||||
'https://jessebrault.nyc3.cdn.digitaloceanspaces.com/images/portrait2.jpg',
|
||||
|
57
texts/Developer.md
Normal file
57
texts/Developer.md
Normal file
@ -0,0 +1,57 @@
|
||||
---
|
||||
description: Information about Java, TypeScript, and web developer Jesse Brault.
|
||||
---
|
||||
# Jesse Brault: Software Developer
|
||||
|
||||
## Languages
|
||||
- Java (5 years), Groovy (5 years), Kotlin (2 years)
|
||||
- TypeScript (4 years), JavaScript (5 years), HTML, CSS/SCSS
|
||||
- Lua, Ruby, Bash
|
||||
|
||||
## Frameworks, Libraries and Technologies
|
||||
- Spring, Spring Boot, Gradle, JUnit, IntelliJ Idea
|
||||
- NodeJS, React, Express, Prisma, GraphQL, VSCode
|
||||
- MySQL, SQLite
|
||||
|
||||
## Programming Interests and Skills
|
||||
- Web development
|
||||
- Test-driven development
|
||||
- Continuous integration and deployment
|
||||
- REST protocol
|
||||
- Dependency injection
|
||||
- Programming languages
|
||||
- Compilers
|
||||
- Git, Github
|
||||
- ORMs
|
||||
- Open-source software
|
||||
- Creating tools and plugins
|
||||
|
||||
## Personal Projects
|
||||
All of my software projects are hosted publicly on GitHub. Please [contact](/contact) me if you have any inquiries related to them or my work in general.
|
||||
|
||||
### JVM
|
||||
|
||||
- [**groowt**, or **Groovy Web Tools**](https://github.com/JesseBrault0709/groowt): A set of libraries and CLI tools for facilitating web-development in Groovy, inspired by Ruby on Rails and Grails. Includes a custom templating language *Web View Components* inspired by ReactJS and Ruby's ERB templates, with a compiler developed with the ANTLR parser generator. 2024–present. Java, Groovy, Kotlin.
|
||||
- [**ssg**, or **Static Site Generator**](https://github.com/JesseBrault0709/ssg): An extensible CLI application for statically generating websites from text files and other input. I created this out of a need for a static site generator in which I could embed Groovy without all the hassle of a full-size server-oriented framework such as Grails. So far, I am using it for all my personal sites (including this very site), and in the past has been used elsewhere. 2023–present. Groovy, Java.
|
||||
- [**jbarchiva**](https://github.com/JesseBrault0709/jbarchiva): A Gradle plugin to facilitate easy access to my personal Maven repository at [archiva.jessebrault.com](https://archiva.jessebrault.com/). 2022-present.
|
||||
- [**fsm**](https://github.com/JesseBrault0709/fsm): A set of easily configurable finite state machines with a simple domain-specific language, also featuring Groovy integration. Java, Groovy. 2022–2023.
|
||||
|
||||
### TypeScript
|
||||
- [**jbci**, or **Jesse Brault Continuous Integration**](https://github.com/JesseBrault0709/jbci): A CI program written in TypeScript which listens to GitHub webhooks and then executes pre-configured shell scripts based on the webhook payload, mainly used to update my websites by simple pushes to my various GitHub repositories. 2022–present.
|
||||
- [**jb-api**](https://github.com/JesseBrault0709/jb-api): A backend for my personal websites which listens for JSON "contact" requests, validates them, and sends mail to personal e-mail addresses. 2022–present.
|
||||
- [**Meals Made Easy**](https://github.com/JesseBrault0709/MealsMadeEasy): A fully-functioning meal-planning web-app developed during my time in _Co.Lab | You Belong in Tech_. I worked closely with a product manager and designer to make the project come alive. It is built with TypeScript, React, Redux, and SCSS. 2021.
|
||||
|
||||
### Web Sites
|
||||
- [Jesse Brault](https://github.com/JesseBrault0709/jb-ssg-site): Where you are right now. It is made using the above-described Groowt and Ssg libraries/utilities. 2024–present.
|
||||
- [Red Dog Ensemble](https://github.com/JesseBrault0709/reddog): A website for a contemporary classical music ensemble I co-founded in New York City, made using the above-mentioned Ssg. 2023. <a href="https://reddogensemble.com/" target="_blank">Visit site.</a>
|
||||
|
||||
## Soft Skills
|
||||
- Cooperation
|
||||
- Team player
|
||||
- Leadership
|
||||
- Agile development method
|
||||
- Self-discipline
|
||||
- Quick learning
|
||||
- Proactive spirit
|
||||
- Cross-functional teamwork
|
||||
- Embracing of team diversity
|
79
texts/Resume.md
Normal file
79
texts/Resume.md
Normal file
@ -0,0 +1,79 @@
|
||||
---
|
||||
description: Online résumé of conductor and composer Jesse Brault.
|
||||
---
|
||||
# Résumé
|
||||
|
||||
For an official up-to-date résumé/CV, please [contact](/contact) me directly.
|
||||
|
||||
## Education
|
||||
- **Master of Music**, Orchestral Conducting. The Juilliard School. 2015–2018.
|
||||
- Private Teachers: Alan Gilbert, James Ross
|
||||
- Guest teachers: Bernard Haitink, Gianandrea Noseda, David Zinman, Fabio Luisi
|
||||
- Relevant coursework: score reading, counterpoint, harmony, history.
|
||||
- **Bachelor of Music**, Theory and Composition. St. Olaf College. *Summa cum laude*. 2009–2013.
|
||||
- Private Teachers: Steven Amundson, Timothy Mahr, Justin Merritt.
|
||||
- Relevant coursework: composition, theory, history, analysis.
|
||||
|
||||
## Conducting Experience
|
||||
- **Private Chamber Orchestra Concert**, at the Juilliard School. December 2023.
|
||||
- Conducted own work *Spirit Travels*
|
||||
- **NDR Elbphilharmonie Orchester**: Assistant conductor and off-stage brass conductor for Alan Gilbert. June 2022.
|
||||
- Strauss: *An Alpine Symphony*
|
||||
- **Boston Symphony Orchestra**: Assistant conductor for Yuan Chang. January 2020.
|
||||
- Chihchun Chi-sun Lee: *Formosan Triptych*
|
||||
- Mozart: Piano concerto no. 25
|
||||
- Tchaikovsky: Symphony no. 3
|
||||
- **New Jersey Symphony Orchestra**: Assistant conductor for Xian Zhang. December 2019.
|
||||
- Anna Clyne: *Within Her Arms*
|
||||
- Rachmaninoff: Piano concerto no. 3
|
||||
- Dvořák: Symphony no. 8
|
||||
- **St. Louis Symphony Orchestra**: Assistant conductor for Andrew Grams. November 2019.
|
||||
- Tchaikovsky: *The Nutcracker*
|
||||
- **Oedipus in the District**: Music director for a contemporary one-act opera performed twice at The Tank, New York, NY. October 2019.
|
||||
- Josh Getman: *Oedipus in the District*
|
||||
- **Red Dog Ensemble**: Conductor and co-founder. Inaugural recording of album *Neon and Oak* at Avaloch Farm Institute, Boscawen, New Hampshire. October 2019.
|
||||
- Jon Cziner: *flowers of fire*
|
||||
- Tom Morrison: *Neon and Oak*
|
||||
- Sato Matsui: *The Imperfect Storm*
|
||||
- Will Stackpole: *L'abîme*
|
||||
- **Nord Anglia Performing Arts Festival**: Bratislava, Slovakia. Guest conductor. March 2019.
|
||||
- Programmed music for two youth orchestras (ages 10–18) and a combined orchestra/chorus work
|
||||
- Prepared parts for distribution to students in advance of festival
|
||||
- Worked closely with festival staff during planning and execution stages
|
||||
- Led and conducted all rehearsals and final concert
|
||||
- **Ensemble Connect**: Guest conductor. March 2019.
|
||||
- John Adams: *Chamber Symphony*
|
||||
- **National Youth Symphony**: Prep-conductor for side-by-side with Daniel Harding and Royal Concertgebouw Orchestra.
|
||||
February 2019.
|
||||
- Schumann: *Manfred Overture*
|
||||
- **Graduation Recital**, The Juilliard School. May 2018.
|
||||
- Sibelius: *Valse triste*
|
||||
- Mahler: Symphony no. 4 (arr. Stein)
|
||||
- **Orlando Philharmonic**: Assistant conductor for Eric Jacobson. October 2017.
|
||||
|
||||
## Composition Performances
|
||||
- *Spirit Travels*, at The Juilliard School. December 2023.
|
||||
- *Capriccioso*, played on-air by NPO Klassiek (Netherlands). [Listen here at 24:20](https://www.npoklassiek.nl/uitzendingen/podium/cb3c4d56-6c59-4100-8a92-b6081daf9719/2022-03-19-podium)
|
||||
- *Capriccioso*, at the Mauritshuis, The Hague, Netherlands. Recorded February 2022 and released live in March 2022.
|
||||
- *Near, Under, Far*, online performance by cellist Gabriel Cabezas from New York, New York. October 2021.
|
||||
- *Arcadia*, online performance by Julia Hamos and Stephen Waarts from Berlin, Germany. November 2020.
|
||||
- *Conversations*, performed by Jocelyn Zhu and Mariella Haubs on WQXR, New York, New York. April 2019.
|
||||
- *Conversations*, world premiere in New York, New York by Jocelyn Zhu and Mariella Haubs. April 2019.
|
||||
- *Sonata Shambhala*, premieres at Marlboro College, Vermont; Seattle, Washington; and Camphill Ghent, New York;
|
||||
by Benjamin Hochman. November 2018.
|
||||
|
||||
## Album
|
||||
- **Neon and Oak**: recorded with [Red Dog Ensemble](https://reddogensemble.com/) and released in March 2023. Co-edited with Will Stackpole. Features four new works by emerging composers. See [here](https://reddogensemble.com/album.html) for more information.
|
||||
|
||||
## Teaching Experience
|
||||
- **Juilliard Pre-College**: Substitute teacher for music theory, counterpoint, and ear training. 2018–2020.
|
||||
- **Fordham University**: Adjunct professor and Fordham Lincoln Center Chamber Orchestra conductor. 2018–2019.
|
||||
- **Juilliard Music Advancement Program**: Substitute teacher for music theory, ear training, and history. 2018–2019.
|
||||
- **New York Youth Symphony**: Substitute teacher for private composition lessons. 2019.
|
||||
- **St. Olaf College**: Teaching assistant for Steven Amundson, music theory. 2010–2013.
|
||||
- **Private Tutor**, St. Olaf College: for ear training. 2011–2013.
|
||||
|
||||
## Instruments
|
||||
- Trombone
|
||||
- Piano
|
||||
- Organ
|
Loading…
Reference in New Issue
Block a user