SlideShare a Scribd company logo
1 of 39
HOW WE BUILT A JOB BOARD
IN ONE WEEK WITH JHIPSTER
Kile Niklawski
Ippon Technologies
Who am I?
• Software Engineer/Architect and technology enthusiast
• A decade of experience - mostly Java
• Worked with various start-ups and large insurance,
finance, and government clients
• Working for Ippon as a Software Architect
kniklawski@ipponusa.com
@KileNiklawski
Ippon Technologies
• 200 software engineers in France and the US
➡ Paris, Nantes, Bordeaux
➡ Richmond (Virginia), Washington (DC)
• Expertise
➡ Digital, Big Data and Cloud
➡ Java, Open-source, Agile
• Open-source Projects :
➡ JHipster,
➡ Tatami …
• @ipponusa
3
Requirements
• Job Board Site MVP
• Three types of users: Company, Recruiter, Candidate (job seeker)
• Company can register and then post jobs
• Recruiter can login and search for applicants
• User can login and search for jobs
• You have one week!
• 1 Product Owner
• 1 Developer
• 1 Scrum Master
What is JHipster?
• Open Source
• Yeoman app generator
• Creates a full stack Java based web app
• Uses Maven/Gradle, Grunt, Bower, Spring and AngularJS
• Spring Boot
• Responsive UI (HTML5/CSS3/Bootstrap)
• Spring Data JPA backend
• Security is wired up
• Caching built-in, log management, monitoring, API docs
DAY 1
Generate the app, customize UI, and deploy to the cloud
Writing User Stories
• Candidate
• I want to log in, build a profile and be able to search and apply to
jobs easily
• Recruiter
• I want to log in, build a personal and company profile
• I want to be able to post jobs
• I want to be able to view the applicants for a job
• I want to search the candidate pool to find a good match
• SysAdmin
• I want to be able to monitor the status of the server, the application’s
services and be able to interact with the REST API
• I want to be able to change the log levels from the browser
• Partner
• I want to pull candidates, jobs and companies using a REST API
Generate the Base Project
Database
Get it Running
• Created the UML diagram using Modelio
• Exported model in XMI
• Imported XMI using jhipster-uml tool
• Now run it!
• mvn clean install
• mvn spring-boot:run
Check out the Entities
CRUD + Search Built-in
Cloud Time
• Wanted to use heroku but had to install Elasticsearch to a
local server in order to keep it free
• Installed the heroku CLI
• One-time setup for deployment
• heroku login
• yo jhipster:heroku
• Every deployment
• mvn clean install –Pprod
• heroku deploy:jar –jar target/boardatjob.war
UI
• Borrowed a few hours from a UI designer for a look-and-
feel
• Chose to use the Compass CSS Authoring Framework
• Replaced the main.scss file with the custom CSS from the
designer
• Modified some image paths and added images
• Copied the designer’s home page into the main.html
• Separated common elements into the navbar template and
created a new header template
DAY 2
Add Candidate Features
Candidate Features
• Added a new listing template for the front page, tied in
Elasticsearch, added the job and company detail pages
• Very little backend work required – mostly HTML and AngularJS
• Needed to sort the job listings
• Had to modify a date field on the job object and add a liquibase
changeset
• Modified the REST controller to pass the sort criteria to Spring Data
• Needed pagination (infinite scroll)
• JHipster provides infinite scrolling but we did not select it
• So we generated a new JHipster project with infinite scroll and
borrowed from that
Landing Page
Job Details
Company Details
DAY 3
Added code coverage analysis and built user profile
Coverage and Static Analysis
• Updated the Sonar version in the pom.xml
• Ignored library files during analysis
• Consolidated test reports in the same directory
• Added code coverage for Java using Jacoco
• Added code coverage for AngularJS using Karma
• Would like to see these generated by JHipster
• Run the analysis:
• mvn clean install
• grunt test
• mvn sonar:sonar
Faceted Search
• How do we implement this?
• Elasticsearch supports faceted search but not sure how to
get the information with the Spring Data Elasticsearch
library (display job counts by location)
• Let’s move on!
User Profile
• Added a user profile entity to support additional fields
• Design choice versus modifying the existing user entity generated
by JHipster
• User profile is related by unique login id to the user entity
• Modified registration to create a user profile
• Modified the settings page to support additional fields for
user profiles
• Found a minor bug in JHipster where refreshing the page
caused the user to lose his roles
• Already fixed!
• Added storing of résumés as a blob in the user profile
• Added a REST resource for upload/download requests
• Used an AngularJS library for drag-and-drop uploads
DAY 4
Recruiter pages, résumé upload, job application
Recruiter Features
• Created a company page for the recruiter
• Created pages to submit and review job listings
• Added a list of job applications for listings submitted by the
recruiter to the home page
• Added ability to review the cover letter and candidate
contact information
• Added ability to download a candidate’s résumé
Registration
Company Details
Create a Job
Jobs Created
Applicants
Candidate Features
• Modified the user profile screen to add fields and support
résumé uploads
• Added screen for applying for a job and adding a cover
letter
User Profile
Apply for Job
DAY 5
Went to the beach
35
MVP
• Signed up for a free SendGrid account and configured the
sendmail settings in the application.yml file
• Focused most of the day on fixing bugs
• Believe it or not, some bugs still exist
CONCLUSION
What Did We Get?
• How long does it take to get a new project up and running?
• Started adding features on Day 1
• Scaffolding was generated
• Deployed initial app to the cloud on Day 1
• Can we modify the generated code?
• Modern and clean organization
• Easily added 3rd party libraries with bower and maven
• A prototype that can be turned into a real, scalable
production application
References
• JHipster Site
• https://jhipster.github.io/
• White Paper
• http://www.ipponusa.com/whitepaper/jhipster-for-techies-hipster-
developer-diary/
• JHipster Demo
• http://www.ipponusa.com/blog/jhipster-demo/

More Related Content

What's hot

JHipster React - Devoxx BE 2017
JHipster React - Devoxx BE 2017JHipster React - Devoxx BE 2017
JHipster React - Devoxx BE 2017Deepu K Sasidharan
 
Intro to react native
Intro to react nativeIntro to react native
Intro to react nativeModusJesus
 
CICD Pipeline Using Github Actions
CICD Pipeline Using Github ActionsCICD Pipeline Using Github Actions
CICD Pipeline Using Github ActionsKumar Shìvam
 
Using GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to AzureUsing GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to AzureKasun Kodagoda
 
GitHub Actions in action
GitHub Actions in actionGitHub Actions in action
GitHub Actions in actionOleksii Holub
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016Matt Raible
 
GitHub Actions - Melbourne UG
GitHub Actions - Melbourne UGGitHub Actions - Melbourne UG
GitHub Actions - Melbourne UGNatraj Yegnaraman
 
GitHub Actions with Node.js
GitHub Actions with Node.jsGitHub Actions with Node.js
GitHub Actions with Node.jsStefan Stölzle
 
WJAX 2013: Java8-Tooling in Eclipse
WJAX 2013: Java8-Tooling in EclipseWJAX 2013: Java8-Tooling in Eclipse
WJAX 2013: Java8-Tooling in Eclipsemartinlippert
 
An iOS Developer's Perspective on React Native
An iOS Developer's Perspective on React NativeAn iOS Developer's Perspective on React Native
An iOS Developer's Perspective on React NativeAleksandras Smirnovas
 
Алексей Волков "Введение в React Native"
Алексей Волков "Введение в React Native"Алексей Волков "Введение в React Native"
Алексей Волков "Введение в React Native"Fwdays
 
Deploying Web Apps with PaaS and Docker Tools
Deploying Web Apps with PaaS and Docker ToolsDeploying Web Apps with PaaS and Docker Tools
Deploying Web Apps with PaaS and Docker ToolsEddie Lau
 
Angular vs React Smackdown - Devoxx BE 2017
Angular vs React Smackdown - Devoxx BE 2017Angular vs React Smackdown - Devoxx BE 2017
Angular vs React Smackdown - Devoxx BE 2017Matt Raible
 
Container based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsContainer based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsCasey Lee
 
ぼくがかんがえたさいきょうのクリーンアーキテクチャ部分適応
ぼくがかんがえたさいきょうのクリーンアーキテクチャ部分適応ぼくがかんがえたさいきょうのクリーンアーキテクチャ部分適応
ぼくがかんがえたさいきょうのクリーンアーキテクチャ部分適応Kenji Tanaka
 

What's hot (20)

JHipster React - Devoxx BE 2017
JHipster React - Devoxx BE 2017JHipster React - Devoxx BE 2017
JHipster React - Devoxx BE 2017
 
Swagger code motion talk
Swagger code motion talkSwagger code motion talk
Swagger code motion talk
 
Intro to react native
Intro to react nativeIntro to react native
Intro to react native
 
CI/CD with GitHub Actions
CI/CD with GitHub ActionsCI/CD with GitHub Actions
CI/CD with GitHub Actions
 
CICD Pipeline Using Github Actions
CICD Pipeline Using Github ActionsCICD Pipeline Using Github Actions
CICD Pipeline Using Github Actions
 
React Native
React NativeReact Native
React Native
 
Using GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to AzureUsing GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to Azure
 
GitHub Actions in action
GitHub Actions in actionGitHub Actions in action
GitHub Actions in action
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
 
GitHub Actions - Melbourne UG
GitHub Actions - Melbourne UGGitHub Actions - Melbourne UG
GitHub Actions - Melbourne UG
 
CI/CD with Github Actions
CI/CD with Github ActionsCI/CD with Github Actions
CI/CD with Github Actions
 
GitHub Actions with Node.js
GitHub Actions with Node.jsGitHub Actions with Node.js
GitHub Actions with Node.js
 
WJAX 2013: Java8-Tooling in Eclipse
WJAX 2013: Java8-Tooling in EclipseWJAX 2013: Java8-Tooling in Eclipse
WJAX 2013: Java8-Tooling in Eclipse
 
An iOS Developer's Perspective on React Native
An iOS Developer's Perspective on React NativeAn iOS Developer's Perspective on React Native
An iOS Developer's Perspective on React Native
 
Алексей Волков "Введение в React Native"
Алексей Волков "Введение в React Native"Алексей Волков "Введение в React Native"
Алексей Волков "Введение в React Native"
 
Deploying Web Apps with PaaS and Docker Tools
Deploying Web Apps with PaaS and Docker ToolsDeploying Web Apps with PaaS and Docker Tools
Deploying Web Apps with PaaS and Docker Tools
 
Angular vs React Smackdown - Devoxx BE 2017
Angular vs React Smackdown - Devoxx BE 2017Angular vs React Smackdown - Devoxx BE 2017
Angular vs React Smackdown - Devoxx BE 2017
 
Container based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsContainer based CI/CD on GitHub Actions
Container based CI/CD on GitHub Actions
 
ぼくがかんがえたさいきょうのクリーンアーキテクチャ部分適応
ぼくがかんがえたさいきょうのクリーンアーキテクチャ部分適応ぼくがかんがえたさいきょうのクリーンアーキテクチャ部分適応
ぼくがかんがえたさいきょうのクリーンアーキテクチャ部分適応
 
CloudSkew Architecture
CloudSkew ArchitectureCloudSkew Architecture
CloudSkew Architecture
 

Similar to Build a Job Board in One Week with JHipster

Introduction to the web engineering Process.pdf
Introduction to the web engineering Process.pdfIntroduction to the web engineering Process.pdf
Introduction to the web engineering Process.pdfMahmoud268161
 
Big ideas in small packages - How microservices helped us to scale our vision
Big ideas in small packages  - How microservices helped us to scale our visionBig ideas in small packages  - How microservices helped us to scale our vision
Big ideas in small packages - How microservices helped us to scale our visionSebastian Schleicher
 
New life inside monolithic application
New life inside monolithic applicationNew life inside monolithic application
New life inside monolithic applicationTaras Matyashovsky
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Derek Jacoby
 
AD1545 - Extending the XPages Extension Library
AD1545 - Extending the XPages Extension LibraryAD1545 - Extending the XPages Extension Library
AD1545 - Extending the XPages Extension Librarypaidi_ed
 
Forge - DevCon 2016: Free your BIM data
Forge - DevCon 2016: Free your BIM dataForge - DevCon 2016: Free your BIM data
Forge - DevCon 2016: Free your BIM dataAutodesk
 
Drew madelung sp designer workflows - sp-biz
Drew madelung   sp designer workflows - sp-bizDrew madelung   sp designer workflows - sp-biz
Drew madelung sp designer workflows - sp-bizDrew Madelung
 
UX Week 2007: CNN.com Relaunch Case Study
UX Week 2007: CNN.com Relaunch Case StudyUX Week 2007: CNN.com Relaunch Case Study
UX Week 2007: CNN.com Relaunch Case StudyAdaptive Path
 
Zero to Sixty with Oracle ApEx
Zero to Sixty with Oracle ApExZero to Sixty with Oracle ApEx
Zero to Sixty with Oracle ApExBradley Brown
 
Envision IT - Application Lifecycle Management for SharePoint in the Enterprise
Envision IT - Application Lifecycle Management for SharePoint in the EnterpriseEnvision IT - Application Lifecycle Management for SharePoint in the Enterprise
Envision IT - Application Lifecycle Management for SharePoint in the EnterpriseEnvision IT
 
Introduction to angular with a simple but complete project
Introduction to angular with a simple but complete projectIntroduction to angular with a simple but complete project
Introduction to angular with a simple but complete projectJadson Santos
 
From MEAN to the MERN Stack
From MEAN to the MERN StackFrom MEAN to the MERN Stack
From MEAN to the MERN StackTroy Miles
 
Shop talk - Project Server 2013
Shop talk - Project Server 2013Shop talk - Project Server 2013
Shop talk - Project Server 2013Chris Givens
 
Architecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering CultureArchitecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering Cultureifnu bima
 
Architecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering CultureArchitecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering CultureSARCCOM
 
Introduction to cypress in Angular (Chinese)
Introduction to cypress in Angular (Chinese)Introduction to cypress in Angular (Chinese)
Introduction to cypress in Angular (Chinese)Hong Tat Yew
 
Amsterdam Titanium User Group - Cloud Services for Apps Nov 2013
Amsterdam Titanium User Group - Cloud Services for Apps Nov 2013Amsterdam Titanium User Group - Cloud Services for Apps Nov 2013
Amsterdam Titanium User Group - Cloud Services for Apps Nov 2013Aaron Saunders
 

Similar to Build a Job Board in One Week with JHipster (20)

Introduction to the web engineering Process.pdf
Introduction to the web engineering Process.pdfIntroduction to the web engineering Process.pdf
Introduction to the web engineering Process.pdf
 
Big ideas in small packages - How microservices helped us to scale our vision
Big ideas in small packages  - How microservices helped us to scale our visionBig ideas in small packages  - How microservices helped us to scale our vision
Big ideas in small packages - How microservices helped us to scale our vision
 
New life inside monolithic application
New life inside monolithic applicationNew life inside monolithic application
New life inside monolithic application
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9
 
AD1545 - Extending the XPages Extension Library
AD1545 - Extending the XPages Extension LibraryAD1545 - Extending the XPages Extension Library
AD1545 - Extending the XPages Extension Library
 
Forge - DevCon 2016: Free your BIM data
Forge - DevCon 2016: Free your BIM dataForge - DevCon 2016: Free your BIM data
Forge - DevCon 2016: Free your BIM data
 
Vasudeo_5.8_Years_of_Exp
Vasudeo_5.8_Years_of_ExpVasudeo_5.8_Years_of_Exp
Vasudeo_5.8_Years_of_Exp
 
Drew madelung sp designer workflows - sp-biz
Drew madelung   sp designer workflows - sp-bizDrew madelung   sp designer workflows - sp-biz
Drew madelung sp designer workflows - sp-biz
 
UX Week 2007: CNN.com Relaunch Case Study
UX Week 2007: CNN.com Relaunch Case StudyUX Week 2007: CNN.com Relaunch Case Study
UX Week 2007: CNN.com Relaunch Case Study
 
Zero to Sixty with Oracle ApEx
Zero to Sixty with Oracle ApExZero to Sixty with Oracle ApEx
Zero to Sixty with Oracle ApEx
 
Envision IT - Application Lifecycle Management for SharePoint in the Enterprise
Envision IT - Application Lifecycle Management for SharePoint in the EnterpriseEnvision IT - Application Lifecycle Management for SharePoint in the Enterprise
Envision IT - Application Lifecycle Management for SharePoint in the Enterprise
 
Introduction to angular with a simple but complete project
Introduction to angular with a simple but complete projectIntroduction to angular with a simple but complete project
Introduction to angular with a simple but complete project
 
77402_VishalLaljeet
77402_VishalLaljeet77402_VishalLaljeet
77402_VishalLaljeet
 
From MEAN to the MERN Stack
From MEAN to the MERN StackFrom MEAN to the MERN Stack
From MEAN to the MERN Stack
 
Shop talk - Project Server 2013
Shop talk - Project Server 2013Shop talk - Project Server 2013
Shop talk - Project Server 2013
 
Architecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering CultureArchitecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering Culture
 
Architecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering CultureArchitecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering Culture
 
Introduction to cypress in Angular (Chinese)
Introduction to cypress in Angular (Chinese)Introduction to cypress in Angular (Chinese)
Introduction to cypress in Angular (Chinese)
 
Rohit Kamboj
Rohit KambojRohit Kamboj
Rohit Kamboj
 
Amsterdam Titanium User Group - Cloud Services for Apps Nov 2013
Amsterdam Titanium User Group - Cloud Services for Apps Nov 2013Amsterdam Titanium User Group - Cloud Services for Apps Nov 2013
Amsterdam Titanium User Group - Cloud Services for Apps Nov 2013
 

Recently uploaded

UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profileakrivarotava
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencessuser9e7c64
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 

Recently uploaded (20)

UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profile
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 

Build a Job Board in One Week with JHipster

  • 1. HOW WE BUILT A JOB BOARD IN ONE WEEK WITH JHIPSTER Kile Niklawski Ippon Technologies
  • 2. Who am I? • Software Engineer/Architect and technology enthusiast • A decade of experience - mostly Java • Worked with various start-ups and large insurance, finance, and government clients • Working for Ippon as a Software Architect kniklawski@ipponusa.com @KileNiklawski
  • 3. Ippon Technologies • 200 software engineers in France and the US ➡ Paris, Nantes, Bordeaux ➡ Richmond (Virginia), Washington (DC) • Expertise ➡ Digital, Big Data and Cloud ➡ Java, Open-source, Agile • Open-source Projects : ➡ JHipster, ➡ Tatami … • @ipponusa 3
  • 4. Requirements • Job Board Site MVP • Three types of users: Company, Recruiter, Candidate (job seeker) • Company can register and then post jobs • Recruiter can login and search for applicants • User can login and search for jobs • You have one week! • 1 Product Owner • 1 Developer • 1 Scrum Master
  • 5. What is JHipster? • Open Source • Yeoman app generator • Creates a full stack Java based web app • Uses Maven/Gradle, Grunt, Bower, Spring and AngularJS • Spring Boot • Responsive UI (HTML5/CSS3/Bootstrap) • Spring Data JPA backend • Security is wired up • Caching built-in, log management, monitoring, API docs
  • 6. DAY 1 Generate the app, customize UI, and deploy to the cloud
  • 7. Writing User Stories • Candidate • I want to log in, build a profile and be able to search and apply to jobs easily • Recruiter • I want to log in, build a personal and company profile • I want to be able to post jobs • I want to be able to view the applicants for a job • I want to search the candidate pool to find a good match • SysAdmin • I want to be able to monitor the status of the server, the application’s services and be able to interact with the REST API • I want to be able to change the log levels from the browser • Partner • I want to pull candidates, jobs and companies using a REST API
  • 10. Get it Running • Created the UML diagram using Modelio • Exported model in XMI • Imported XMI using jhipster-uml tool • Now run it! • mvn clean install • mvn spring-boot:run
  • 11. Check out the Entities
  • 12. CRUD + Search Built-in
  • 13. Cloud Time • Wanted to use heroku but had to install Elasticsearch to a local server in order to keep it free • Installed the heroku CLI • One-time setup for deployment • heroku login • yo jhipster:heroku • Every deployment • mvn clean install –Pprod • heroku deploy:jar –jar target/boardatjob.war
  • 14. UI • Borrowed a few hours from a UI designer for a look-and- feel • Chose to use the Compass CSS Authoring Framework • Replaced the main.scss file with the custom CSS from the designer • Modified some image paths and added images • Copied the designer’s home page into the main.html • Separated common elements into the navbar template and created a new header template
  • 16. Candidate Features • Added a new listing template for the front page, tied in Elasticsearch, added the job and company detail pages • Very little backend work required – mostly HTML and AngularJS • Needed to sort the job listings • Had to modify a date field on the job object and add a liquibase changeset • Modified the REST controller to pass the sort criteria to Spring Data • Needed pagination (infinite scroll) • JHipster provides infinite scrolling but we did not select it • So we generated a new JHipster project with infinite scroll and borrowed from that
  • 20. DAY 3 Added code coverage analysis and built user profile
  • 21. Coverage and Static Analysis • Updated the Sonar version in the pom.xml • Ignored library files during analysis • Consolidated test reports in the same directory • Added code coverage for Java using Jacoco • Added code coverage for AngularJS using Karma • Would like to see these generated by JHipster • Run the analysis: • mvn clean install • grunt test • mvn sonar:sonar
  • 22. Faceted Search • How do we implement this? • Elasticsearch supports faceted search but not sure how to get the information with the Spring Data Elasticsearch library (display job counts by location) • Let’s move on!
  • 23. User Profile • Added a user profile entity to support additional fields • Design choice versus modifying the existing user entity generated by JHipster • User profile is related by unique login id to the user entity • Modified registration to create a user profile • Modified the settings page to support additional fields for user profiles • Found a minor bug in JHipster where refreshing the page caused the user to lose his roles • Already fixed! • Added storing of résumés as a blob in the user profile • Added a REST resource for upload/download requests • Used an AngularJS library for drag-and-drop uploads
  • 24. DAY 4 Recruiter pages, résumé upload, job application
  • 25. Recruiter Features • Created a company page for the recruiter • Created pages to submit and review job listings • Added a list of job applications for listings submitted by the recruiter to the home page • Added ability to review the cover letter and candidate contact information • Added ability to download a candidate’s résumé
  • 31. Candidate Features • Modified the user profile screen to add fields and support résumé uploads • Added screen for applying for a job and adding a cover letter
  • 34. DAY 5 Went to the beach
  • 35. 35
  • 36. MVP • Signed up for a free SendGrid account and configured the sendmail settings in the application.yml file • Focused most of the day on fixing bugs • Believe it or not, some bugs still exist
  • 38. What Did We Get? • How long does it take to get a new project up and running? • Started adding features on Day 1 • Scaffolding was generated • Deployed initial app to the cloud on Day 1 • Can we modify the generated code? • Modern and clean organization • Easily added 3rd party libraries with bower and maven • A prototype that can be turned into a real, scalable production application
  • 39. References • JHipster Site • https://jhipster.github.io/ • White Paper • http://www.ipponusa.com/whitepaper/jhipster-for-techies-hipster- developer-diary/ • JHipster Demo • http://www.ipponusa.com/blog/jhipster-demo/