Skip to content

Commit

Permalink
Updated resume
Browse files Browse the repository at this point in the history
  • Loading branch information
joao-mbn committed Oct 5, 2024
1 parent a62be00 commit 5ca645b
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 34 deletions.
5 changes: 3 additions & 2 deletions app/components/Background/Background.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@
.backgroundHexagons {
mask-image: url('/background-pattern.svg');
animation: rotate 5s linear infinite;
background: linear-gradient(var(--angle), theme(colors.slate.50), theme(colors.slate.300));
background: linear-gradient(var(--angle), theme(colors.slate.50), theme(colors.slate.200));
}

.background {
background-image: linear-gradient(calc(var(--angle) * -1), theme(colors.slate.100), theme(colors.slate.400));
background-image: linear-gradient(calc(var(--angle) * -1), theme(colors.slate.100), theme(colors.slate.300));
animation: rotate 7.5s linear infinite;
}

10 changes: 10 additions & 0 deletions app/components/Bullet.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { ComponentPropsWithoutRef } from 'react';

export interface BulletProps extends ComponentPropsWithoutRef<'p'> {}

export function Bullet({ className, ...props }: BulletProps) {
return (
<div {...props} className={'bullet dark-bg-gradient h-4 w-4 flex-shrink-0 translate-y-2 ' + (className ?? '')} />
);
}

16 changes: 10 additions & 6 deletions app/components/DescriptionContainer/DescriptionItem.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
import { ComponentPropsWithoutRef } from 'react';
import { Paragraph } from '..';
import { Paragraph, ParagraphProps } from '..';
import { Bullet } from '../Bullet';

export interface DescriptionItemProps extends ComponentPropsWithoutRef<'li'> {}
export interface DescriptionItemProps extends ComponentPropsWithoutRef<'li'> {
paragraphProps?: Omit<ParagraphProps, 'children'>;
}

export function DescriptionItem({ children, ...props }: DescriptionItemProps) {
export function DescriptionItem({ children, paragraphProps, ...props }: DescriptionItemProps) {
return (
<li className="mb-1 flex gap-4 lg:mb-2" {...props}>
<div className="bullet dark-bg-gradient h-4 w-4 flex-shrink-0 translate-y-2" />
<Paragraph className="mb-0">{children}</Paragraph>
<li {...props} className={'flex gap-4 ' + (props.className ?? '')}>
<Bullet />
<Paragraph {...paragraphProps}>{children}</Paragraph>
</li>
);
}

3 changes: 2 additions & 1 deletion app/components/Paragraph.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ export interface ParagraphProps extends ComponentPropsWithoutRef<'p'> {

export function Paragraph({ children, className, ...props }: ParagraphProps) {
return (
<p className={'mb-4 tiny:text-justify ' + (className ?? '')} {...props}>
<p className={'mb-2 tiny:text-justify lg:mb-4 ' + (className ?? '')} {...props}>
{children}
</p>
);
}

6 changes: 3 additions & 3 deletions app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ export default function Home() {
I&apos;m João, a natural problem solver and Devil&apos;s Advocate with <MyAge /> years of experience.
</Paragraph>
<Paragraph>
My most relevant ability is that I tend to learn new stuff fast. Come to me with some idea, proposal,
worldview or argument and we will be set for a good talk.{' '}
<ExternalLink href={`mailto:${EMAIL}`}>Send me a message</ExternalLink>.
My most relevant skill is to learn fast. Come to me with some idea, proposal, worldview or argument and we
will be set for a good talk. <ExternalLink href={`mailto:${EMAIL}`}>Send me a message</ExternalLink>.
</Paragraph>
</section>
</section>
</Page>
);
}

1 change: 1 addition & 0 deletions app/projects/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,4 @@ export default function Projects() {
</Page>
);
}

79 changes: 57 additions & 22 deletions app/resume/page.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DescriptionBlock, DescriptionBlockProps, DescriptionItem, ExternalLink, Page, Paragraph } from '../components';
import { Bullet } from '../components/Bullet';
import { MyWorkExperience } from '../components/MyWorkExperience';
import { AZURE_CERTIFICATION, ETR_OPTIMIZATION_GITHUB, IELTS_VALIDATION } from '../utils/constants';

Expand All @@ -11,18 +12,49 @@ export default function Resume() {
className="[&&]:mt-0 [&&]:lg:mt-0"
titleProps={{ className: 'font-semibold' }}>
<Paragraph>
Full stack developer with <MyWorkExperience /> of experience in web development.
Fast learner and self-taught software engineer with <MyWorkExperience /> of experience in web development.
</Paragraph>
</DescriptionBlock>
<SecondaryBlock title="Work Experience">
<TertiaryBlock title="Radix Engineering and Software - Developer III (Aug. 2023 - present)">
<TertiaryBlock title="Suger - Software Engineer (Oct. 2024 - Present)">
<RelevantSkills skills={['Golang']} />
</TertiaryBlock>
<TertiaryBlock title="Radix Engineering and Software - Developer IV (Sep. 2024 - Oct. 2024)">
<ul>
<DescriptionItem>
Leads a team of four developers and mentors a software development intern. Provides tailored feedback to
enhance performance, aiding in comprehension of requirements and their implications. Helped newcomers
achieve an estimated 50% to 100% increase in productivity.
Optimized performance and usability of a Dashboard displaying industrial data with multiple charts
containing hundreds of thousands of points each and a Web GL 3D view, with:
<ul>
<DescriptionItem className="mt-1 lg:mt-2">
Caching and lazy loading to reduce app stable memory consumption from 1.2~1.6GB to between 150MB~450MB
under different scenarios.
</DescriptionItem>
<DescriptionItem>
Request splitting and geometry filters to reduce request durations up to 95% in the best scenarios.
</DescriptionItem>
<DescriptionItem paragraphProps={{ className: '!mb-0' }}>
Prefetching strategies to have features being instantly available on user click, that would otherwise
take over 10s to be available.
</DescriptionItem>
</ul>
</DescriptionItem>
</ul>
<RelevantSkills skills={['Next.js', 'React', 'Cognite', 'Three.js', 'Typescript', 'Git']} />
</TertiaryBlock>
<TertiaryBlock title="Radix Engineering and Software - Developer III (Aug. 2023 - Sep. 2024)">
<ul>
<DescriptionItem>
Led the implementation of a new interactive 3D visualization of an oil refinery plant for increased data
contextualization, having left stakeholders impressed by the MVP and wanting to expand its features.
</DescriptionItem>
<DescriptionItem>
Led a team of four developers, providing tailored feedback to enhance performance, aiding in comprehension
of requirements and their implications, fostering improved questioning, workflow organization, and
continuous testing. Helped team members to achieve an estimated 50% to 100% increase in productivity,
measured by reduced time for delivering user stories.
</DescriptionItem>
</ul>
<RelevantSkills skills={['Next.js', 'React', 'CSS', 'Three.js', 'Typescript', 'Git']} />
</TertiaryBlock>
<TertiaryBlock title="Radix Engineering and Software - Developer II (Aug. 2022 - Aug. 2023)">
<ul>
Expand All @@ -39,6 +71,7 @@ export default function Resume() {
Consistently delivered user stories within 40% to 70% of allocated timeframes.
</DescriptionItem>
</ul>
<RelevantSkills skills={['.NET', 'React', 'SQL', 'CI/CD', 'Typescript', 'Git']} />
</TertiaryBlock>
<TertiaryBlock title="Radix Engineering and Software - Software Development Intern (May 2021 - Aug. 2022)">
<ul>
Expand All @@ -48,6 +81,7 @@ export default function Resume() {
position as Developer II, bypassing the typical entry-level position of Developer I.
</DescriptionItem>
</ul>
<RelevantSkills skills={['.NET', 'Angular', 'SQL', 'CSS', 'Typescript', 'Git']} />
</TertiaryBlock>
</SecondaryBlock>
<SecondaryBlock title="Education">
Expand All @@ -61,23 +95,7 @@ export default function Resume() {
<ExternalLink href={ETR_OPTIMIZATION_GITHUB}>Here you can find the source code</ExternalLink>.
</DescriptionItem>
</ul>
</TertiaryBlock>
</SecondaryBlock>
<SecondaryBlock title="Technologies">
<TertiaryBlock title="" titleProps={{ className: 'm-0 p-0' }}>
<ul>
<DescriptionItem>
Front-end: Typescript, Javascript, HTML, CSS, React, Tailwind CSS, Angular, RxJS, Redux.
</DescriptionItem>
<DescriptionItem>
Back-end: .NET, C#, Dapper, Typescript, Javascript, Node, Express, NextJS, Mongoose.
</DescriptionItem>
<DescriptionItem>Databases: SQL Server, Azure Cosmos DB, Mongo DB.</DescriptionItem>
<DescriptionItem>DevOps: Azure DevOps, Azure Pipelines, Github, Github Actions, Docker.</DescriptionItem>
<DescriptionItem>Cloud: Azure Cloud (Functions, Cosmos DB, App Services, Storage, etc.).</DescriptionItem>
<DescriptionItem>IDEs: VS Code, Visual Studio, SSMS, DBeaver.</DescriptionItem>
<DescriptionItem>Others: Git, Python, Bash, Jest, Vitest, Playwright, xUnit.</DescriptionItem>
</ul>
<RelevantSkills skills={['Python', 'Chemical Engineering', 'Numerical Analysis', 'Process Optimization']} />
</TertiaryBlock>
</SecondaryBlock>
<SecondaryBlock title="Certifications">
Expand Down Expand Up @@ -121,3 +139,20 @@ function TertiaryBlock(props: DescriptionBlockProps<'h3'>) {
function SecondaryBlock(props: DescriptionBlockProps<'h2'>) {
return <DescriptionBlock samanticTitleTag="h2" titleProps={{ className: 'font-semibold' }} {...props} />;
}

function RelevantSkills({ skills }: { skills: string[] }) {
return (
<Paragraph>
<div className="flex gap-1">
<span className="font-semibold">Relevant Skills:</span>
{skills.map((s, i) => (
<div className="flex items-center" key={s}>
{i > 0 && <Bullet className="mx-2 !translate-y-0" />}
{s}
</div>
))}
</div>
</Paragraph>
);
}

0 comments on commit 5ca645b

Please sign in to comment.