Fixes, tweaks, and i18n for the employers page.

This commit is contained in:
Nick Winter 2014-07-10 19:17:51 -07:00
parent 3d5cd29519
commit 45545796a0
6 changed files with 157 additions and 116 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View file

@ -281,7 +281,7 @@
education_duration_help: "When?"
education_description: "Description"
education_description_help: "Highlight anything about this educational experience. (140 chars; optional)"
our_notes: "Our Notes"
our_notes: "CodeCombat's Notes"
remarks: "Remarks"
projects: "Projects"
projects_header: "Add 3 projects"
@ -298,26 +298,37 @@
player_code: "Player Code"
employers:
want_to_hire_our_players: "Hire CodeCombat Players"
hire_developers_not_credentials: "Hire developers, not credentials."
get_started: "Get Started"
already_screened: "We've already technically screened all our candidates"
filter_further: ", but you can also filter further:"
filter_visa: "Visa"
filter_visa_yes: "US Authorized"
filter_visa_no: "Not Authorized"
filter_education_top: "Top School"
filter_education_other: "Other"
filter_role_web_developer: "Web Developer"
filter_role_software_developer: "Software Developer"
filter_role_mobile_developer: "Mobile Developer"
filter_experience: "Experience"
filter_experience_senior: "Senior"
filter_experience_junior: "Junior"
filter_experience_recent_grad: "Recent Grad"
filter_experience_student: "College Student"
filter_results: "results"
start_hiring: "Start hiring."
reasons: "Three reasons you should hire through us:"
everyone_looking: "Everyone here is looking for their next opportunity."
everyone_looking_blurb: "Forget about 20% LinkedIn InMail response rates. Everyone that we list on this site wants to find their next position and will respond to your request for an introduction."
weeding: "Sit back; we've done the weeding for you."
weeding_blurb: "Every player that we list has been screened for technical ability. We also perform phone screens for select candidates and make notes on their profiles to save you time."
pass_screen: "They will pass your technical screen."
pass_screen_blurb: "Review each candidate's code before reaching out. One employer found that 5x as many of our devs passed their technical screen than hiring from Hacker News."
make_hiring_easier: "Make my hiring easier, please."
what: "What is CodeCombat?"
what_blurb: "CodeCombat is a multiplayer browser programming game. Players write code to control their forces in battle against other developers. We support JavaScript, Python, Lua, Clojure, CoffeeScript, and Io."
who: "Who Are the Players?"
who_blurb: "CodeCombateers are CTOs, VPs of Engineering, and graduates of top 20 engineering schools. Our advanced players enjoy playing with difficult code and solving problems."
how: "How Do We Find Developers?"
how_blurb: "We host competitive tournaments to attract competitive software engieneers. We then use in-house algorithms to identify the best players among the top 5% of tournament winners."
why: "Why Hire Through Us?"
why_blurb_1: "We will save you time. Every CodeCombateer we feaure is "
cost: "How much do we charge?"
cost_blurb: "We charge 15% of first year's salary and offer a 100% money back guarantee for 90 days. We don't charge for candidates who are already actively being interviewed at your company."
response: "What's the response rate?"
response_blurb: "Almost every developer you contact on CodeCombat will respond to inquires whether or not they want to interivew. If you would like help finding a candidate for your role, we can make recommendations."
why_blurb_2: "looking for work"
why_blurb_3: ", has "
why_blurb_4: "demonstrated top notch technical skills"
why_blurb_5: ", and has been "
why_blurb_6: "personally screened by us"
why_blurb_7: ". Stop screening and start hiring."
see_candidates: "Click here to see our candidates"
candidate_name: "Name"
candidate_location: "Location"
candidate_looking_for: "Looking For"

View file

@ -1,13 +1,8 @@
#employers-view
.artisanal-claim
//font-variant: small-caps
text-align: center
font-size: 20px
font-weight: bold
font-family: Arial, Helvetica, sans-serif
border-top: 1px solid #DBDBDB
border-bottom: 1px solid #DBDBDB
background: transparent url(/images/pages/employer/artisanal_claim.png) no-repeat center
margin-bottom: 5px
height: 24px
.employer-button
background: #fce232 /* Old browsers */
@ -20,7 +15,15 @@
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fce232', endColorstr='#ea8e2b',GradientType=0 )
vertical-align: text-bottom
margin-left: 30px
#filter-column
margin-left: 0px
padding-right: 0
#candidates-column
padding-left: 5px
padding-right: 5px
//filter panels
#filter
border: 2px solid #CBCBCB
@ -32,10 +35,12 @@
border-top-right-radius: 0px
#folder-icon
margin-right: 5px
color: #919191
.panel-body
background-color: #D9D9D9
border-top-left-radius: 0px
border-top-right-radius: 0px
padding: 5px 10px 10px 10px
.panel
border: 1px red
border-radius: 0px
@ -67,11 +72,13 @@
float: right
#login-link, #logout-link
float: right
color: #333333
position: absolute
right: 10px
top: -25px
color: black
display: inline-block
:visited
color: #333333
color: black
#logout-link:hover
cursor: pointer
@ -113,6 +120,7 @@
display: inline-block
vertical-align: top
.employer_icon
display: block
width: 125px
margin: 0px auto
@ -146,17 +154,26 @@
vertical-align: top
tr
.candidate-picture
width: 100px
height: 100px
background-color: transparent
background-size: cover
background-repeat: no-repeat
background-position: center
width: 75px
height: 75px
border-radius: 5px
overflow: hidden
margin-right: 10px
img
border-radius: 5px
&.anonymous
background-size: contain
.candidate-description
width: 100%
vertical-align: bottom
div
text-overflow: ellipsis
overflow: hidden
height: 17px
td.candidate-description
padding-bottom: 5px
td.candidate-name-cell

View file

@ -397,7 +397,7 @@ block content
if user.get('jobProfileNotes') || me.isAdmin()
div(class="our-notes-section" + (editing ? " deemphasized" : ""))
h3.experience-header(data-i18n="account_profile.our_notes") Our Notes
h3.experience-header(data-i18n="account_profile.our_notes") CodeCombat's Notes
- var notes = user.get('jobProfileNotes') || '';
if me.isAdmin()
textarea#job-profile-notes!= notes

View file

@ -2,20 +2,96 @@ extends /templates/recruitment_base
block content
.artisanal-claim
| Always 100% Pre-Screened
if me.get('anonymous')
a#login-link Login
a#login-link(data-i18n="login.log_in") Log In
br
if !isEmployer && !me.isAdmin()
#tagline
h1(data-i18n="employers.hire_developers_not_credentials") Hire developers, not credentials.
button.btn.get-started-button.employer-button Get started
button.btn.get-started-button.employer-button(data-i18n="employers.get_started") Get Started
else
if !me.get('anonymous')
a#logout-link(data-i18n="login.log_out") Logout
a#logout-link(data-i18n="login.log_out") Log Out
br
.row
- var fullProfiles = isEmployer || me.isAdmin();
if fullProfiles
#filter-column.col-md-3
#filter
.panel-group#filter_panel
a#filter-link(data-toggle="collapse" data-target="#collapseOne")
.panel.panel-default
.panel-heading
h4.panel-title
span.glyphicon.glyphicon-folder-open#folder-icon
| Filter
.panel-collapse.collapse.in#collapseOne
.panel-body
p
strong(data-i18n="employers.already_screened") We've already technically screened all our candidates
span(data-i18n="employers.filter_further") , but you can also filter further:
form#filters
.filter_section#visa_filter
h4(data-i18n="employers.filter_visa") Visa
label
input(type="checkbox" name="visa" value="Authorized to work in the US")
span(data-i18n="employers.filter_visa_yes") US Authorized
| (#{candidatesInFilter("visa","Authorized to work in the US")})
label
input(type="checkbox" name="visa" value="Need visa sponsorship")
span(data-i18n="employers.filter_visa_no") Not Authorized
| (#{candidatesInFilter("visa","Need visa sponsorship")})
.filter_section#school_filter
h4(data-i18n="account_profile.education") Education
label
input(type="checkbox" name="schoolFilter" value="Top School")
span(data-i18n="employers.filter_education_top") Top School
| (#{candidatesInFilter("schoolFilter","Top School")})
label
input(type="checkbox" name="schoolFilter" value="Other")
span(data-i18n="employers.filter_education_other") Other
| (#{candidatesInFilter("schoolFilter","Other")})
.filter_section#role_filter
h4(data-i18n="employers.candidate_role") Role
label
input(type="checkbox" name="roleFilter" value="Web Developer")
span(data-i18n="employers.filter_role_web_developer") Web Developer
| (#{candidatesInFilter("roleFilter","Web Developer")})
label
input(type="checkbox" name="roleFilter" value="Software Developer")
span(data-i18n="employers.filter_role_software_developer") Software Developer
| (#{candidatesInFilter("roleFilter","Software Developer")})
label
input(type="checkbox" name="roleFilter" value="Mobile Developer")
span(data-i18n="employers.filter_role_mobile_developer") Mobile Developer
| (#{candidatesInFilter("roleFilter","Mobile Developer")})
.filter_section#seniority_filter
h4(data-i18n="employers.filter_experience") Experience
label
input(type="checkbox" name="seniorityFilter" value="Senior")
span(data-i18n="employers.filter_experience_senior") Senior
| (#{candidatesInFilter("seniorityFilter","Senior")})
label
input(type="checkbox" name="seniorityFilter" value="Junior")
span(data-i18n="employers.filter_experience_junior") Junior
| (#{candidatesInFilter("seniorityFilter","Junior")})
label
input(type="checkbox" name="seniorityFilter" value="Recent Grad")
span(data-i18n="employers.filter_experience_recent_grad") Recent Grad
| (#{candidatesInFilter("seniorityFilter","Recent Grad")})
label
input(type="checkbox" name="seniorityFilter" value="College Student")
span(data-i18n="employers.filter_experience_student") College Student
| (#{candidatesInFilter("seniorityFilter","College Student")})
//input#select_all_checkbox(type="checkbox" name="select_all" checked)
//| Select all
p#results
| #{numberOfCandidates}
span(data-i18n="employers.results") results
//button.btn#create-alert-button Create Alert
#candidates-column(class=fullProfiles ? "full-profiles col-md-9" : "teaser-profiles col-md-12")
if candidates.length
#candidate-table
@ -27,12 +103,12 @@ block content
- var profileAge = (new Date() - new Date(profile.updated)) / 86400 / 1000;
- var expired = profileAge > 2 * 30.4;
- var curated = profile.curated;
- var photoSize = fullProfiles ? 100 : 50;
- var photoSize = fullProfiles ? 75 : 50;
tr.candidate-row(data-candidate-id=candidate.id, id=candidate.id, class=expired ? "expired" : "")
td(rowspan=3)
.candidate-picture
img(src=candidate.getPhotoURL(photoSize, false, true), alt=profile.name, title=profile.name, width=photoSize)
- var photoURL = candidate.getPhotoURL(photoSize, false, true);
div(class="candidate-picture " + (/^\/file/.test(photoURL) ? "" : "anonymous"), style='background-image: url(' + encodeURI(photoURL) + ')')
if fullProfiles
td.candidate-name-cell
strong= profile.name
@ -40,9 +116,11 @@ block content
span= profile.jobTitle
tr.description_row(data-candidate-id=candidate.id)
if curated && curated.shortDescription
td.candidate-description #{curated.shortDescription}
td.candidate-description
div #{curated.shortDescription}
else
td.candidate-description #{profile.shortDescription}
td.candidate-description
div #{profile.shortDescription}
tr.border_row(data-candidate-id=candidate.id)
if curated
- var workHistory = curated.workHistory.join(",");
@ -60,95 +138,30 @@ block content
if workHistory
img(src="/images/pages/employer/briefcase.png")
| #{workHistory}
if fullProfiles
.col-md-3
#filter
.panel-group#filter_panel
a#filter-link(data-toggle="collapse" data-target="#collapseOne")
.panel.panel-default
.panel-heading
h4.panel-title
span.glyphicon.glyphicon-folder-open#folder-icon
| Filter
.panel-collapse.collapse.in#collapseOne
.panel-body
p
strong We've already technically screened all our candidates
| , but you can also filter further:
form#filters
.filter_section#visa_filter
h4 Visa
label
input(type="checkbox" name="visa" value="Authorized to work in the US")
| US Authorized (#{candidatesInFilter("visa","Authorized to work in the US")})
label
input(type="checkbox" name="visa" value="Need visa sponsorship")
| Not Authorized (#{candidatesInFilter("visa","Need visa sponsorship")})
.filter_section#school_filter
h4 Education
label
input(type="checkbox" name="schoolFilter" value="Top School")
| Top School (#{candidatesInFilter("schoolFilter","Top School")})
label
input(type="checkbox" name="schoolFilter" value="Other")
| Other (#{candidatesInFilter("schoolFilter","Other")})
.filter_section#role_filter
h4 Role
label
input(type="checkbox" name="roleFilter" value="Web Developer")
| Web Developer (#{candidatesInFilter("roleFilter","Web Developer")})
label
input(type="checkbox" name="roleFilter" value="Software Developer")
| Software Developer (#{candidatesInFilter("roleFilter","Software Developer")})
label
input(type="checkbox" name="roleFilter" value="Mobile Developer")
| Mobile Developer (#{candidatesInFilter("roleFilter","Mobile Developer")})
.filter_section#seniority_filter
h4 Experience
label
input(type="checkbox" name="seniorityFilter" value="Senior")
| Senior (#{candidatesInFilter("seniorityFilter","Senior")})
label
input(type="checkbox" name="seniorityFilter" value="Junior")
| Junior (#{candidatesInFilter("seniorityFilter","Junior")})
label
input(type="checkbox" name="seniorityFilter" value="Recent Grad")
| Recent Grad (#{candidatesInFilter("seniorityFilter","Recent Grad")})
label
input(type="checkbox" name="seniorityFilter" value="College Student")
| College Student (#{candidatesInFilter("seniorityFilter","College Student")})
//input#select_all_checkbox(type="checkbox" name="select_all" checked)
//| Select all
p#results #{numberOfCandidates} results
//button.btn#create-alert-button Create Alert
if !fullProfiles
div#info_wrapper
span.hiring-call-to-action
h2#start-hiring(data-i18n="employers.start_hiring") Start hiring.
button.btn.get-started-button.employer-button Get started
button.btn.get-started-button.employer-button(data-i18n="employers.get_started") Get Started
h2#hiring-reasons.hiring-call-to-action(data-i18n="employers.reasons") 3 reasons you should hire through us:
h2#hiring-reasons.hiring-call-to-action(data-i18n="employers.reasons") Three reasons you should hire through us:
.reasons#top_row
.reason
img.employer_icon(src="/images/pages/employer/employer_icon2.png")
h3(data-i18n="employers.everyone_looking") Everyone here is looking for work.
h3(data-i18n="employers.everyone_looking") Everyone here is looking for their next opportunity.
p(data-i18n="employers.everyone_looking_blurb") Forget about 20% LinkedIn InMail response rates. Everyone that we list on this site wants to find their next position and will respond to your request for an introduction.
.reason
img.employer_icon(src="/images/pages/employer/employer_icon6.png")
h3(data-i18n="employers.weeding") We've done the weeding for you.
//this will break in i18n. Fix the inlining
p(data-i18n="employers.weeding_blurb")
| We only feature developers that we would work with. We've reviewed each profile (in addition to meeting with many of the candidates.)
h3(data-i18n="employers.weeding") Sit back; we've done the weeding for you.
p(data-i18n="employers.weeding_blurb") Every player that we list has been screened for technical ability. We also perform phone screens for select candidates and make notes on their profiles to save you time.
.reason
img(class="employer_icon" src="/images/pages/employer/employer_icon3.png")
h3(data-i18n="employers.pass_screen") They will pass your technical screen.
p(data-i18n="employers.pass_screen_blurb") All of these developers have ranked in our programming competitions. One employer found that 5x as many of our devs passed their technical screen than hiring from Hacker News.
p(data-i18n="employers.pass_screen_blurb") Review each candidate's code before reaching out. One employer found that 5x as many of our devs passed their technical screen than hiring from Hacker News.
span.hiring-call-to-action
h2(data-i18n="employers.make_hiring_easier") Make my hiring easier, please.
button.btn.get-started-button.employer-button Get started
button.btn.get-started-button.employer-button(data-i18n="employers.get_started") Get Started
.reasons#bottom_row
.reason_long
img.employer_icon(src="/images/pages/employer/employer_icon1.png")
@ -158,5 +171,5 @@ block content
.reason_long
img.employer_icon(src="/images/pages/employer/employer_icon5.png")
.reason_text
h3(data-i18n="employers.cost") Who Are the Players?
p(data-i18n="employers.cost_blurb") CodeCombateers are CTOs, VPs of Engineering, and graduates of top 20 engineering schools. No junior developers here. Our players enjoy playing with code and solving problems.
h3(data-i18n="employers.cost") How much do we charge?
p(data-i18n="employers.cost_blurb") We charge 15% of first year's salary and offer a 100% money back guarantee for 90 days. We don't charge for candidates who are already actively being interviewed at your company.