Skip to content

Commit ab66d8b

Browse files
chore: generalize client challenge (#8)
1 parent 931124e commit ab66d8b

File tree

13 files changed

+135
-153
lines changed

13 files changed

+135
-153
lines changed

.github/workflows/ci.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ on:
1111
- "**.md"
1212

1313
env:
14-
GO_VERSION: "1.22.5" # https://go.dev/dl/
15-
GOLANGCI_LINT_VERSION: "v1.59.1" # https://github.com/golangci/golangci-lint/releases
14+
GO_VERSION: "1.23.4" # https://go.dev/dl/
15+
GOLANGCI_LINT_VERSION: "v1.62.2" # https://github.com/golangci/golangci-lint/releases
1616

1717
jobs:
1818
lint:
@@ -27,15 +27,15 @@ jobs:
2727
with:
2828
version: ${{ env.GOLANGCI_LINT_VERSION }}
2929
skip-cache: true
30-
working-directory: ./ios-engineer/server
30+
working-directory: ./client-challenge/server
3131

3232
security:
3333
runs-on: ubuntu-latest
3434
steps:
3535
- uses: golang/govulncheck-action@v1
3636
with:
3737
go-version-input: ${{ env.GO_VERSION }}
38-
work-dir: ./ios-engineer/server
38+
work-dir: ./client-challenge/server
3939

4040
build:
4141
runs-on: ubuntu-latest
@@ -45,5 +45,5 @@ jobs:
4545
with:
4646
go-version: ${{ env.GO_VERSION }}
4747
- name: Build go code
48-
working-directory: ./ios-engineer/server
48+
working-directory: ./client-challenge/server
4949
run: go build

backend-engineer/readme.md renamed to backend-challenge/readme.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Backend Challenge
22

3-
This challenge is part of the backend hiring process at [Heart
4-
Hands](https://hearthands.tech/).
3+
_This challenge is part of the engineering hiring process at [Heart
4+
Hands](https://hearthands.tech/)._
55

66
## Why this challenge?
77

@@ -11,8 +11,9 @@ understanding of their technical stack, and excellent product intuitions to join
1111
our team.
1212

1313
This exercise has been designed to give a glimpse of what it is like to build a
14-
messaging app, and the kind of technical challenges we face and care about. We
15-
are expecting you to spend between 4 and 6 hours on this challenge.
14+
messaging app, and the kind of technical challenges we face and care about.
15+
16+
We expect you to spend 4-6 hours on this challenge, simulating real-world, time-boxed work.
1617

1718
## Instructions
1819

@@ -50,7 +51,7 @@ will have to prioritize what you work on. A few things that are important for us
5051
and that will be considered during the review:
5152
- **documentation**: is the readme clear? are important parts of the code
5253
documented?
53-
- **impact**: which features did you prioritize?
54+
- **impact**: what did you consciouslly decided to prioritize?
5455
- **maintainability**: is the code well-structured and easy to read/evolve?
5556
- **robustness**: is the code tested or easily testable? are edge-cases
5657
considered? is static analysis leveraged?
File renamed without changes.

ios-engineer/readme.md renamed to client-challenge/readme.md

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# iOS Challenge
1+
# Client Challenge
22

3-
This challenge is part of the iOS hiring process at [Heart
4-
Hands](https://hearthands.tech/).
3+
_This challenge is part of the engineering hiring process at [Heart
4+
Hands](https://hearthands.tech/)._
55

66
## Why this challenge?
77

@@ -11,19 +11,24 @@ understanding of their technical stack, and excellent product intuitions to join
1111
our team.
1212

1313
This exercise has been designed to give a glimpse of what it is like to build a
14-
messaging app, and the kind of technical challenges we face and care about. We
15-
are expecting you to spend between 4 and 6 hours on this challenge.
14+
messaging app, and the kind of technical challenges we face and care about.
15+
16+
We expect you to spend 4-6 hours on this challenge, simulating real-world,
17+
time-boxed work.
1618

1719
## Instructions
1820

19-
You are tasked with the implementation of an iOS messaging app that allows the user to
20-
communicate (send and receive text messages) with bots, each in their own 1:1
21+
You are tasked with the implementation of a messaging app that allows the user
22+
to communicate (send and receive text messages) with bots, each in their own 1:1
2123
chat.
2224

23-
A server is available for you to use. You can read more about it in
25+
A companion server is available for you to use. You can read more about it in
2426
[`./server`](./server). Its documentation contains information on how it can be
2527
run, and what kinds of API endpoints & entities are available.
2628

29+
You can choose a target platform of your choice for this challenge: iOS, macOS,
30+
or web.
31+
2732
Functional requirements:
2833

2934
- [ ] The app should start on a screen showing the list of all chats
@@ -36,14 +41,14 @@ Functional requirements:
3641

3742
Some topics that we find interesting to dig:
3843

39-
- [ ] Make the app work offline (both for app state and sending)
44+
- [ ] Make the app work offline using a persistence layer of your choice
4045
- [ ] Make the app idempotent in regards to what you send and receive
4146
- [ ] Integrate a splashscreen to hide chats while the app is loading
4247
- [ ] Add support for optimistic sending to give instantaneity in the UI
4348
- [ ] Add support for a local read/unread indicator
44-
- [ ] Avoid block changing states so the app feels fluid & snappy
45-
- [ ] Make the app compatible to run on iPad and macOS
46-
- [ ] Make the app runnable on multiple devices
49+
- [ ] Avoid to block changing states so the app feels fluid & snappy
50+
- [ ] Make the app available in multiple environments (e.g.: iOS/macOS,
51+
web/electron)
4752
- [ ] _Anything_ that you feel could improve the UX!
4853

4954
## Design
@@ -60,7 +65,7 @@ will have to prioritize what you work on. A few things that are important for us
6065
and that will be considered during the review:
6166
- **documentation**: is the readme clear? are important parts of the code
6267
documented?
63-
- **impact**: which features did you prioritize?
68+
- **impact**: what did you consciouslly decided to prioritize?
6469
- **maintainability**: is the code well-structured and easy to read/evolve?
6570
- **robustness**: is the code tested or easily testable? are edge-cases
6671
considered? is static analysis leveraged?
File renamed without changes.

client-challenge/server/data.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[
2+
"I told my doctor that I broke my arm in two places – he told me to stop going to those places.",
3+
"This is your captain speaking, AND THIS IS YOUR CAPTAIN SHOUTING.",
4+
"Before you criticize someone, walk a mile in their shoes. That way, when you do criticize them, you're a mile away, and you have their shoes.",
5+
"I was at the park wondering why this frisbee kept getting bigger… and then it hit me.",
6+
"Two fish in a tank, one looks at the other and says, 'How do you drive this thing?'",
7+
"Evening news is where they begin with 'Good evening,' and then proceed to tell you why it isn’t.",
8+
"When I met my now wife, I asked if she was vegetarian because she really loved animals. She responded, 'No, I just really hate vegetables.'",
9+
"I know they say that money talks, but all mine says is 'Goodbye.'",
10+
"I have an inferiority complex, but it's not a very good one.",
11+
"What do you call a lazy kangaroo? A pouch potato.",
12+
"My wife and I laugh about how competitive we are. But I laugh more.",
13+
"My wife told me to stop impersonating a flamingo. I had to put my foot down.",
14+
"Have you heard about the guy who stole the calendar?! Well, he got 12 months!"
15+
]

ios-engineer/server/go.mod renamed to client-challenge/server/go.mod

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ module github.com/hearthands/challenges/ios-engineer/server
33
go 1.22.5
44

55
require (
6-
github.com/go-chi/chi/v5 v5.1.0
6+
github.com/go-chi/chi/v5 v5.2.0
77
github.com/go-chi/render v1.0.3
8+
github.com/google/uuid v1.6.0
89
github.com/r3labs/sse/v2 v2.10.0
9-
golang.org/x/exp v0.0.0-20240707233637-46b078467d37
10+
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67
1011
)
1112

1213
require (
1314
github.com/ajg/form v1.5.1 // indirect
14-
golang.org/x/net v0.27.0 // indirect
15+
golang.org/x/net v0.33.0 // indirect
1516
gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect
1617
)

ios-engineer/server/go.sum renamed to client-challenge/server/go.sum

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU=
22
github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
33
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
44
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5-
github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw=
6-
github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
5+
github.com/go-chi/chi/v5 v5.2.0 h1:Aj1EtB0qR2Rdo2dG4O94RIU35w2lvQSj6BRA4+qwFL0=
6+
github.com/go-chi/chi/v5 v5.2.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
77
github.com/go-chi/render v1.0.3 h1:AsXqd2a1/INaIfUSKq3G5uA8weYx20FOsM7uSoCyyt4=
88
github.com/go-chi/render v1.0.3/go.mod h1:/gr3hVkmYR0YlEy3LxCuVRFzEu9Ruok+gFqbIofjao0=
9+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
10+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
911
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1012
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
1113
github.com/r3labs/sse/v2 v2.10.0 h1:hFEkLLFY4LDifoHdiCN/LlGBAdVJYsANaLqNYa1l/v0=
@@ -14,11 +16,11 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
1416
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
1517
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
1618
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
17-
golang.org/x/exp v0.0.0-20240707233637-46b078467d37 h1:uLDX+AfeFCct3a2C7uIWBKMJIR3CJMhcgfrUAqjRK6w=
18-
golang.org/x/exp v0.0.0-20240707233637-46b078467d37/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
19+
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo=
20+
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c=
1921
golang.org/x/net v0.0.0-20191116160921-f9c825593386/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
20-
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
21-
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
22+
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
23+
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
2224
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
2325
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
2426
gopkg.in/cenkalti/backoff.v1 v1.1.0 h1:Arh75ttbsvlpVA7WtVpH4u9h6Zl46xuptxqLxPiSo4Y=

0 commit comments

Comments
 (0)