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 How we built 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 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
 
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
 
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 How we built 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 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
 
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
 
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

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 

Recently uploaded (20)

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 

How we built 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/