Skip to content

Commit

Permalink
Update CV with CTM
Browse files Browse the repository at this point in the history
  • Loading branch information
opsb committed Mar 17, 2021
1 parent 23c69e3 commit 6cddced
Show file tree
Hide file tree
Showing 9 changed files with 5,720 additions and 7,937 deletions.
1 change: 1 addition & 0 deletions .tool-versions
@@ -1 +1,2 @@
elm 0.19.0
nodejs 14.14.0
12 changes: 12 additions & 0 deletions Makefile
@@ -0,0 +1,12 @@
.PHONY: run
run:
elm-app start

.PHONY: publish
publish:
echo "----! Remember to run `make gen.pdf` and commit before publishing"
elm-app build && netlify deploy --prod

.PHONY: gen.pdf
gen.pdf:
npm run generate-pdf
2 changes: 1 addition & 1 deletion elm.json
Expand Up @@ -3,7 +3,7 @@
"source-directories": [
"src"
],
"elm-version": "0.19.0",
"elm-version": "0.19.1",
"dependencies": {
"direct": {
"elm/browser": "1.0.0",
Expand Down
13,504 changes: 5,628 additions & 7,876 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -22,7 +22,7 @@
},
"homepage": "https://github.com/opsb/cv-elm#readme",
"devDependencies": {
"create-elm-app": "^2.2.3",
"create-elm-app": "^5.22.0",
"puppeteer": "^1.10.0",
"serve-static": "^1.13.2"
}
Expand Down
Binary file modified public/opsb.pdf
Binary file not shown.
69 changes: 42 additions & 27 deletions src/Data.elm
Expand Up @@ -80,7 +80,22 @@ introduction =


experience =
{ twentyBn =
{ ctm =
{ title = "Consultant"
, location = "London / Remote"
, company = "CompareThe\nMarket.com"
, dates = "Feb 2019-Present"
, projects =
[ { name = "MoneyHub"
, start = 2019
, end = 2021
, overview = "Having bought Bean.com, a startup that helped people save money on their bills CompareTheMarket wanted to replace the existing platform with a high performance elixir service to integrate the majority of UK high street banks using the Open Banking specification. Devised and built custom algorithms for analysing transaction data and identifying merchants and recurring bills and payments."
, stack = [ "Elixir", "Elm", "Javascript", "Ruby" ]
, talkingPoints = []
}
]
}
, twentyBn =
{ title = "Consultant"
, location = "Berlin / Remote"
, company = "TwentyBN"
Expand Down Expand Up @@ -169,7 +184,7 @@ experience =
[ { name = "Give4Sure"
, start = 2012
, end = 2014
, overview = "A cross-browser plugin and webapp that helped charities raise money while their supporters shopped online. The browser extension highlighted links on any page to participating retailers in a charity's chosen color. Given that the extension ran on every page and costs needed to be kept low it was built so that it can run entirely independently of our servers."
, overview = "A cross-browser plugin and webapp that helped charities raise money while their supporters shopped online. The browser extension highlighted links on any page to participating retailers in a charity's chosen color."
, stack = [ "Browser extensions", "Ruby on Rails", "Postgres", "Ember.js", "Kanban", "BDD" ]
, talkingPoints =
[ "Built browser extension to handle high volume but with low infrastructure costs."
Expand All @@ -181,7 +196,7 @@ experience =
, { name = "Marks and Spencer School Uniforms"
, start = 2011
, end = 2012
, overview = "A collaboration with Marks and Spencer to provide bespoke school uniforms to UK schools. Built a webapp that allowed schools to create and preview custom school uniforms based on Marks and Spencer's standard uniform."
, overview = "Led the development of an online store allowing schools to customise standard Marks and Spencer uniforms with their school badges and colours."
, stack = [ "Ruby on Rails", "Postgres", "Kanban", "BDD" ]
, talkingPoints =
[ "Built online catalogue that allowed schools to sign up and create their own bespoke uniform online."
Expand All @@ -201,25 +216,16 @@ experience =
]
}
, informa =
{ title = "Tech lead"
{ title = "Tech lead/Architect"
, location = "London"
, company = "Informa"
, dates = "2005-2010"
, projects =
[ { name = "Intelligence Centre 2"
, start = 2008
, end = 2010
, stack = [ "Java/Spring", "Oracle DB", "Scrum", "BDD" ]
, overview = "Custom CMS for analysis of the telecoms sector. Frustrated with using web based text editors (which were very poor at the time), I proposed and built a webdav based solution for the journalists to write articles in word, save and then see them rendered immediately on the website."
, talkingPoints =
[ "Devised a webdav based system that allowed journalists to edit articles directly in MS Word. The system allowed journalists to hit save in Word and instantly see a preview on the live site."
]
}
, { name = "World Cellular Information Service"
[ { name = "World Cellular Information Service"
, start = 2007
, end = 2006
, stack = [ "Java", "Spring", "MS Analytics services", "Oracle DB", "Scrum", "TDD" ]
, overview = "BI portal for worldwide cellular market data. Having developed the successful architecture for the new WBIS product (see below) I was asked to roll it out for what's Informa Telecom's flagship product."
, overview = "BI portal for worldwide cellular market data. Having developed the successful architecture for the new WBIS product (see below) I was asked to roll it out for Informa Telecom's flagship product."
, talkingPoints =
[ "Used incremental approach with frequent releases to gradually shift product over to new architecture without disrupting the live service or requiring parallel development."
, "Introduced clover to track test coverage and promote a TDD approach"
Expand All @@ -236,6 +242,15 @@ experience =
, "Introduced maven to standardise build process"
]
}
, { name = "Intelligence Centre 2"
, start = 2008
, end = 2010
, stack = [ "Java/Spring", "Oracle DB", "Scrum", "BDD" ]
, overview = "Devised a webdav based CMS allowing Journalists to write their articles in MS Word, save and see an instant preview of their article on the website."
, talkingPoints =
[ "Devised a webdav based system that allowed journalists to edit articles directly in MS Word. The system allowed journalists to hit save in Word and instantly see a preview on the live site."
]
}
]
}
, nutshellDevelopment =
Expand Down Expand Up @@ -271,27 +286,27 @@ education =
skills : List Skill
skills =
[ { name = "Ruby on Rails", years = 8 }
, { name = "Elixir / Phoenix", years = 2.5 }
, { name = "Elm", years = 2.5 }
, { name = "Elixir / Phoenix", years = 5 }
, { name = "Elm", years = 5 }
, { name = "React/Redux", years = 0.5 }
, { name = "RxJS", years = 1.5 }
, { name = "Ember.js", years = 5 }
, { name = "Javascript - ES2017", years = 8 }
, { name = "Javascript - ES2017", years = 10 }
, { name = "Java", years = 5 }
, { name = "SQL", years = 14 }
, { name = "SQL", years = 16 }
, { name = "Firebase", years = 2 }
, { name = "OLAP / MDX", years = 4 }
, { name = "Event-sourcing/CQRS", years = 2 }
, { name = "Scrum / Kanban", years = 13 }
, { name = "BDD / TDD", years = 13 }
, { name = "Git", years = 10 }
, { name = "Scrum / Kanban", years = 15 }
, { name = "BDD / TDD", years = 15 }
, { name = "Git", years = 12 }
, { name = "Realtime systems", years = 5 }
, { name = "HTML", years = 12 }
, { name = "CSS / SASS", years = 12 }
, { name = "OO", years = 14 }
, { name = "Functional", years = 3 }
, { name = "HTML", years = 16 }
, { name = "CSS / SASS", years = 16 }
, { name = "OO", years = 16 }
, { name = "Functional", years = 5 }
, { name = "Heroku", years = 8 }
, { name = "AWS", years = 8 }
, { name = "AWS", years = 10 }
]


Expand Down
46 changes: 18 additions & 28 deletions src/Main.elm
Expand Up @@ -223,7 +223,7 @@ pagePersonalDetailsSection =
, column [ spacing 10, paddingXY 0 10 ]
[ el [ Font.light, Font.size 16 ] (text "Passionate full stack leader")
, el [ Font.light, Font.size 16 ] (text "Founder, CTO, VP Engineering, Architect")
, el [ Font.light, Font.size 16 ] (text "14 Years experience")
, el [ Font.light, Font.size 16 ] (text "16 Years experience")
]
, contentDetails
]
Expand Down Expand Up @@ -259,8 +259,9 @@ experiencePage =
"Experience"
)
, row [ width fill, height fill ]
[ Atom.pageColumn [ spacing 40 ]
[ positionView (Data.experience |> .twentyBn)
[ Atom.pageColumn [ spacing 25 ]
[ positionView (Data.experience |> .ctm)
, positionView (Data.experience |> .twentyBn)
, positionView (Data.experience |> .liqid)
, positionView (Data.experience |> .zapnito)
, positionView (Data.experience |> .lytbulb)
Expand All @@ -282,7 +283,7 @@ experiencePage =
introductionSection : Element msg
introductionSection =
column [ spacing 15 ]
[ Atom.paragraph [] [ text "Building software that people actually like to use is what gets me going. With 14 years experience I've delivered successful products for the Telecoms, Retail, Publishing, Energy and Charity sectors. I've led teams to build a wide variety of projects including realtime social platforms and project management tools, business Intelligence, custom content management systems, online stores and browser extensions." ]
[ Atom.paragraph [] [ text "Building software that people actually like to use is what gets me going. With 16 years experience I've delivered successful products for the Telecoms, Retail, Publishing, Energy and Charity sectors. I've led teams to build a wide variety of projects including realtime social platforms and project management tools, business Intelligence, custom content management systems, online stores and browser extensions." ]
, Atom.paragraph [] [ text "From day one I've been an agile practitioner, whether it's Scrum or Kanban, Lean, BDD, outside-in, pair-programming, you name it, I've been doing it for years. I've usually led from the front but I’m comfortable working in many different styles and value project consistency over personal preferences so am equally comfortable working alone or slotting into an existing team." ]
]

Expand Down Expand Up @@ -393,40 +394,30 @@ mobilePositionView position =

positionView : Position -> Element msg
positionView position =
column
[ spacing 15
, width fill
, paddingEach { top = 0, right = 0, bottom = 5, left = 0 }
]
[ column [ spacing 8, width fill ]
[ row [ width fill, spacing 20 ]
[ column [ width (fillPortion 11), spacing 5, alignTop ]
[ el [ alignLeft ]
(Atom.title2 [] position.company)
, el [ alignLeft ] (Atom.title3 [ Font.color Colors.red ] <| position.title)
, el [ alignLeft ] (Atom.bodyText [] position.dates)
, el [ alignLeft ] (Atom.bodyText [] position.location)
]
, row [ spacing 20, width (fillPortion 20), alignTop ]
[ column [ spacing 15, width (fillPortion 20) ] (List.map projectView position.projects)
]
]
row [ width fill, spacing 0 ]
[ column [ width (fillPortion 7), spacing 5, alignTop ]
[ Atom.title3 [ Font.size 16, paddingEach { top = 0, right = 0, bottom = 5, left = 0 } ] position.company
, Atom.title5 [ Font.size 12, Font.color Colors.red ] <| position.title
, Atom.bodyText [ Font.size 10 ] position.dates
, Atom.bodyText [ Font.size 10 ] position.location
]
, column [ spacing 15, width (fillPortion 20) ]
(List.map projectView position.projects)
]


projectView : Project -> Element msg
projectView project =
column [ spacing 5 ]
[ Atom.title3 [ paddingEach { top = 0, right = 0, bottom = 5, left = 0 } ] project.name
[ Atom.title3 [ Font.size 14, Font.medium, paddingEach { top = 0, right = 0, bottom = 2, left = 0 }, centerY ] project.name
, Atom.paragraph [ Font.size 12 ] [ text <| projectSummary <| project ]
, hashTags project.stack
]


projectSummary : Project -> String
projectSummary project =
project.overview |> String.split "." |> List.head |> Maybe.withDefault ""
project.overview


hashTags : List String -> Element msg
Expand All @@ -438,14 +429,14 @@ hashTags tags =
|> String.join ", "
in
Atom.paragraph
[ Font.size 11
[ Font.size 9
, Font.color Colors.grey

--, Font.italic
--, Atom.titleFont
, Font.alignLeft
, Font.medium
, Font.family [ Font.monospace ]
, Font.family []
]
[ text formatted ]

Expand Down Expand Up @@ -494,8 +485,7 @@ openSourceProject project =
{ url = project.repo
, label =
row [ width fill ]
[ el [ alignLeft ] (Atom.title3 [] project.name)
, el [ alignRight ] (Atom.title4 [] project.shortInvolvement)
[ el [ alignLeft ] (Atom.title4 [ Font.size 14, Font.medium ] project.name)
]
}
, Atom.autolink project.overview
Expand Down
21 changes: 17 additions & 4 deletions src/View/Atom.elm
Expand Up @@ -17,6 +17,7 @@ module View.Atom exposing
, title2
, title3
, title4
, title5
, titleFont
, verticalDivider
)
Expand Down Expand Up @@ -76,7 +77,7 @@ title3 : List (Element.Attribute msg) -> String -> Element msg
title3 customAttrs title_ =
attrsEl
[ titleFont
, Font.size 18
, Font.size 16
, Font.color Colors.grey
, Font.semiBold
, letterSpacing -0.2
Expand All @@ -87,6 +88,18 @@ title3 customAttrs title_ =

title4 : List (Element.Attribute msg) -> String -> Element msg
title4 customAttrs title_ =
attrsEl
[ titleFont
, Font.size 14
, Font.semiBold
, Font.color Colors.grey
]
customAttrs
(text title_)


title5 : List (Element.Attribute msg) -> String -> Element msg
title5 customAttrs title_ =
attrsEl
[ titleFont
, Font.size 14
Expand Down Expand Up @@ -173,13 +186,13 @@ bodyText customAttrs text_ =

tableOfContentsLine : String -> String -> Element msg
tableOfContentsLine leftText rightText =
row [ width fill, Font.family [ Font.monospace ] ]
row [ width fill, Font.family [] ]
[ el
[ Font.color
Colors.grey
, paddingEach { bottom = 0, left = 0, top = 0, right = 5 }
]
(title4 [ Font.family [ Font.monospace ], Font.size 11 ] leftText)
(title4 [ Font.family [], Font.size 11 ] leftText)
, el
[ width fill
, Border.dotted
Expand All @@ -193,7 +206,7 @@ tableOfContentsLine leftText rightText =
[ Font.color Colors.grey
, paddingEach { bottom = 0, left = 5, top = 0, right = 0 }
]
(title4 [ Font.family [ Font.monospace ], Font.size 12 ] rightText)
(title4 [ Font.letterSpacing 0.1, Font.size 10 ] rightText)
]


Expand Down

0 comments on commit 6cddced

Please sign in to comment.