I'm working as one of the engineering leads in RunaHR. As our platform is a Saas, we thought It'd be good to have an API (We chose Ruby and Rails for this) and a SPA (built with React and Redux ) connected. We started the SPA with Create React App since It's pretty easy to start.\n\n

We use Jest as the testing framework and react-testing-library to test React components. In Rails we make tests using RSpec.\n\n

Our main database is PostgreSQL, but we also use MongoDB to store some type of data. We started to use Redis  for cache and other time sensitive operations. \n\n

We have a couple of extra projects: One is an Employee app built with React Native and the other is an internal back office dashboard built with Next.js for the client and Python in the backend side.\n\n

Since we have different frontend apps we have found useful to have Bit to document visual components and utils in JavaScript.","private":false,"topics":[],"upvotesCount":22,"user":{"type":"id","generated":false,"id":"User:103607490214490361","typename":"User"},"viewCount":3101259,"stack":null,"services":[{"type":"id","generated":false,"id":"Tool:101231773835511567","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773835996572","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773849098825","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775357043443","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776176987604","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773770920543","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231778299095193","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774472965337","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773853533403","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773854388643","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773854768982","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774544144572","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776411419473","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775648895157","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773939333405","typename":"Tool"}],"publicId":"103607666193472806","rawContent":"I'm working as one of the engineering leads in RunaHR. As our platform is a Saas, we thought It'd be good to have an API (We chose @{Ruby}|tool:989| and @{Rails}|tool:990| for this) and a SPA (built with @{React}|tool:1020| and @{Redux}|tool:4074| ) connected. We started the SPA with @{Create React App}|tool:5537| since It's pretty easy to start.\n\nWe use @{Jest}|tool:830| as the testing framework and @{react-testing-library}|tool:9787| to test React components. In Rails we make tests using @{RSpec}|tool:2539|.\n\nOur main database is @{PostgreSQL}|tool:1028|, but we also use @{MongoDB}|tool:1030| to store some type of data. We started to use @{Redis}|tool:1031|  for cache and other time sensitive operations. \n\nWe have a couple of extra projects: One is an Employee app built with @{React Native}|tool:2699| and the other is an internal back office dashboard built with @{Next.js}|tool:5936| for the client and @{Python}|tool:993| in the backend side.\n\nSince we have different frontend apps we have found useful to have @{Bit}|tool:4616| to document visual components and utils in @{JavaScript}|tool:1209|.\n\n ","publishedAt":"2020-02-05T18:32:01Z","commentsCount":0,"upvoted":false,"flagged":false,"bookmarked":false,"draft":false,"createdAt":"2020-02-05T18:32:03Z","decisionType":"freeform","showAutoGeneratedTag":false,"permissions":{"type":"id","generated":true,"id":"$StackDecision:103607666193472806.permissions","typename":"Permissions"},"subjectTools":[],"fromTools":[],"toTools":[],"deleted":false,"link":null,"company":{"type":"id","generated":false,"id":"Company:102667275315628655","typename":"Company"},"rootComments":[],"__typename":"StackDecision"},"User:103607490214490361":{"id":"103607490214490361","username":"bryam8694","imageUrl":"https://img.stackshare.io/user/370353/default_928f93993229da90e1b2503d762169d55e88534b.jpg","displayName":"Bryam Rodriguez","title":null,"companyName":null,"__typename":"User","path":"/bryam8694"},"Tool:101231773835511567":{"id":"101231773835511567","name":"Ruby","imageUrl":"https://img.stackshare.io/service/989/ruby.png","__typename":"Tool","slug":"ruby","title":"A dynamic, interpreted, open source programming language with a focus on simplicity and productivity","verified":false,"canonicalUrl":"/ruby","path":"/ruby","votes":3973,"fans":26481,"stacks":41818,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231773835996572":{"id":"101231773835996572","name":"Rails","imageUrl":"https://img.stackshare.io/service/990/x57_Lorv.png","__typename":"Tool","slug":"rails","title":"Web development that doesn't hurt","verified":false,"canonicalUrl":"/rails","path":"/rails","votes":5441,"fans":16794,"stacks":19467,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231773849098825":{"id":"101231773849098825","name":"React","imageUrl":"https://img.stackshare.io/service/1020/OYIaJ1KK.png","__typename":"Tool","slug":"react","title":"A JavaScript library for building user interfaces","verified":false,"canonicalUrl":"/react","path":"/react","votes":4076,"fans":162874,"stacks":173088,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231775357043443":{"id":"101231775357043443","name":"Redux","imageUrl":"https://img.stackshare.io/service/4074/13142323.png","__typename":"Tool","slug":"reduxjs","title":"Predictable state container for JavaScript apps","verified":false,"canonicalUrl":"/reduxjs","path":"/reduxjs","votes":674,"fans":28474,"stacks":30540,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231776176987604":{"id":"101231776176987604","name":"Create React App","imageUrl":"https://img.stackshare.io/service/5537/oi64YzXY.jpg","__typename":"Tool","slug":"create-react-app","title":"Create React apps with no build configuration","verified":true,"canonicalUrl":"/create-react-app","path":"/create-react-app","votes":4,"fans":1298,"stacks":1039,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231773770920543":{"id":"101231773770920543","name":"Jest","imageUrl":"https://img.stackshare.io/service/830/jest.png","__typename":"Tool","slug":"jest","title":"Painless JavaScript Unit Testing","verified":false,"canonicalUrl":"/jest","path":"/jest","votes":175,"fans":5997,"stacks":9735,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"}},"Tool:101231778299095193":{"id":"101231778299095193","name":"react-testing-library","imageUrl":"https://img.stackshare.io/service/9787/49996085.png","__typename":"Tool","slug":"react-testing-library","title":"A lightweight solution for testing React components","verified":false,"canonicalUrl":"/react-testing-library","path":"/react-testing-library","votes":4,"fans":278,"stacks":272,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"}},"Tool:101231774472965337":{"id":"101231774472965337","name":"RSpec","imageUrl":"https://img.stackshare.io/service/2539/logo.png","__typename":"Tool","slug":"rspec","title":"Behaviour Driven Development for Ruby","verified":false,"canonicalUrl":"/rspec","path":"/rspec","votes":0,"fans":489,"stacks":2628,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"}},"Tool:101231773853533403":{"id":"101231773853533403","name":"PostgreSQL","imageUrl":"https://img.stackshare.io/service/1028/ASOhU5xJ.png","__typename":"Tool","slug":"postgresql","title":"A powerful, open source object-relational database system","verified":false,"canonicalUrl":"/postgresql","path":"/postgresql","votes":3549,"fans":95461,"stacks":98240,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231773854388643":{"id":"101231773854388643","name":"MongoDB","imageUrl":"https://img.stackshare.io/service/1030/leaf-360x360.png","__typename":"Tool","slug":"mongodb","title":"The database for giant ideas","verified":true,"canonicalUrl":"/mongodb","path":"/mongodb","votes":4131,"fans":93786,"stacks":93534,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231773854768982":{"id":"101231773854768982","name":"Redis","imageUrl":"https://img.stackshare.io/service/1031/default_cbce472cd134adc6688572f999e9122b9657d4ba.png","__typename":"Tool","slug":"redis","title":"Open source (BSD licensed), in-memory data structure store","verified":false,"canonicalUrl":"/redis","path":"/redis","votes":3943,"fans":54911,"stacks":59431,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231774544144572":{"id":"101231774544144572","name":"React Native","imageUrl":"https://img.stackshare.io/service/2699/KoK6gHzp.jpg","__typename":"Tool","slug":"react-native","title":"A framework for building native apps with React","verified":false,"canonicalUrl":"/react-native","path":"/react-native","votes":1156,"fans":34384,"stacks":33566,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231776411419473":{"id":"101231776411419473","name":"Next.js","imageUrl":"https://img.stackshare.io/service/5936/nextjs.png","__typename":"Tool","slug":"next-js","title":"A small framework for server-rendered universal JavaScript apps ","verified":false,"canonicalUrl":"/next-js","path":"/next-js","votes":326,"fans":6521,"stacks":6766,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231773837179153":{"id":"101231773837179153","name":"Python","imageUrl":"https://img.stackshare.io/service/993/pUBY5pVj.png","__typename":"Tool","slug":"python","title":"A clear and powerful object-oriented programming language, comparable to Perl, Ruby, Scheme, or Java.","verified":false,"canonicalUrl":"/python","path":"/python","votes":6882,"fans":226687,"stacks":244858,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231775648895157":{"id":"101231775648895157","name":"Bit","imageUrl":"https://img.stackshare.io/service/4616/QP1hRAU5_400x400.jpg","__typename":"Tool","slug":"bit","title":"An open source tool for code sharing","verified":false,"canonicalUrl":"/bit","path":"/bit","votes":0,"fans":152,"stacks":41,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"}},"Tool:101231773939333405":{"id":"101231773939333405","name":"JavaScript","imageUrl":"https://img.stackshare.io/service/1209/javascript.jpeg","__typename":"Tool","slug":"javascript","title":"Lightweight, interpreted, object-oriented language with first-class functions","verified":false,"canonicalUrl":"/javascript","path":"/javascript","votes":8072,"fans":312712,"stacks":360796,"followingTool":false,"followContext":null},"$StackDecision:103607666193472806.permissions":{"edit":false,"delete":false,"__typename":"Permissions"},"$Company:102667275315628655.stackDecisions({\"after\":null,\"first\":4}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:103607666193472806","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$Company:102667275315628655.stackDecisions({\"after\":null,\"first\":4}).pageInfo":{"endCursor":"MQ","hasNextPage":false,"__typename":"PageInfo"},"$Company:102667275315628655.stacksList({\"after\":null,\"first\":9,\"query\":\"\"})":{"count":1,"edges":[{"type":"id","generated":true,"id":"$Company:102667275315628655.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.0","typename":"StackEdge"}],"pageInfo":{"type":"id","generated":true,"id":"$Company:102667275315628655.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).pageInfo","typename":"PageInfo"},"__typename":"StackConnection"},"Stack:102667285811917238":{"websiteUrl":"https://runahr.com","id":"102667285811917238","slug":"runahr","name":"RunaHR","path":"/runahr/runahr","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773410696721","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773669807419","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773849098825","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773705712932","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773853533403","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773533786842","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773990286939","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773854388643","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773479019630","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773482334926","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774206661614","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773854768982","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773924002641","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773835511567","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774544144572","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773531895266","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775357043443","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773470689784","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774781423216","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773403188549","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773454477801","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773835996572","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774519122717","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773523090140","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773418092710","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773501041914","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774492574471","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773620969295","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773421016326","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773770920543","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773436512034","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776411419473","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776833491432","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773416481916","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774472965337","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773419330893","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774801633884","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776473814866","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775622314951","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774314369014","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775236642254","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774325781298","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775409266236","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774122434767","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774491193670","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773873140185","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773480426879","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101986228309190940","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776176987604","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775011822585","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231777411056834","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776543564264","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773863068091","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773948220612","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773441530720","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775511817312","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773825068049","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773420308094","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774419484644","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773507276914","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231778299095193","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773548003563","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773532480458","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773567487121","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774946495627","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773974171792","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775648895157","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231777268592926","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775035225500","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776227933443","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776677799043","typename":"Tool"}],"__typename":"Stack"},"Tool:101231773410696721":{"id":"101231773410696721","name":"GitHub","imageUrl":"https://img.stackshare.io/service/27/default_869c34d29acc794d60ecdd5d2b5bfc042a80a4ec.jpg","canonicalUrl":"/github","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Layer:101231772947875434":{"id":"101231772947875434","slug":"devops","__typename":"Layer"},"Layer:101231772947014609":{"id":"101231772947014609","slug":"application_and_data","__typename":"Layer"},"Tool:101231773669807419":{"id":"101231773669807419","name":"Docker","imageUrl":"https://img.stackshare.io/service/586/n4u37v9t_400x400.png","canonicalUrl":"/docker","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773705712932":{"id":"101231773705712932","name":"Slack","imageUrl":"https://img.stackshare.io/service/675/RNiSRYOF_400x400.jpg","canonicalUrl":"/slack","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Layer:101231772948217612":{"id":"101231772948217612","slug":"business_tools","__typename":"Layer"},"Tool:101231773533786842":{"id":"101231773533786842","name":"WordPress","imageUrl":"https://img.stackshare.io/service/250/logo.png","canonicalUrl":"/wordpress","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231773990286939":{"id":"101231773990286939","name":"Postman","imageUrl":"https://img.stackshare.io/service/1336/xWMRvm_5_400x400.png","canonicalUrl":"/postman","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Layer:101231772947362527":{"id":"101231772947362527","slug":"utilities","__typename":"Layer"},"Tool:101231773479019630":{"id":"101231773479019630","name":"Google Drive","imageUrl":"https://img.stackshare.io/service/148/default_fd639832ff07e3b4f80afd816d82ce5e3b666ed2.jpg","canonicalUrl":"/google-drive","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773482334926":{"id":"101231773482334926","name":"Jira","imageUrl":"https://img.stackshare.io/service/154/default_53605d3093005bd7853e04a258c0d4746e803e29.jpg","canonicalUrl":"/jira","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231774206661614":{"id":"101231774206661614","name":"Kubernetes","imageUrl":"https://img.stackshare.io/service/1885/21_d3cvM.png","canonicalUrl":"/kubernetes","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773409399220":{"id":"101231773409399220","name":"Amazon S3","imageUrl":"https://img.stackshare.io/service/25/amazon-s3.png","canonicalUrl":"/amazon-s3","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773924002641":{"id":"101231773924002641","name":"Sass","imageUrl":"https://img.stackshare.io/service/1171/jCR2zNJV.png","canonicalUrl":"/sass","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773531895266":{"id":"101231773531895266","name":"G Suite","imageUrl":"https://img.stackshare.io/service/247/oYkAxyQM_400x400.jpg","canonicalUrl":"/g-suite","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231773470689784":{"id":"101231773470689784","name":"Heroku","imageUrl":"https://img.stackshare.io/service/133/3wgIDj3j.png","canonicalUrl":"/heroku","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231774781423216":{"id":"101231774781423216","name":"Docker Compose","imageUrl":"https://img.stackshare.io/service/3136/docker-compose.png","canonicalUrl":"/docker-compose","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773403188549":{"id":"101231773403188549","name":"Amazon CloudFront","imageUrl":"https://img.stackshare.io/service/13/amazon-cloudfront.png","canonicalUrl":"/amazon-cloudfront","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773454477801":{"id":"101231773454477801","name":"New Relic","imageUrl":"https://img.stackshare.io/service/103/default_193410db3a7e419c7b436961bf41d733c7346b59.png","canonicalUrl":"/new-relic","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773970332063":{"id":"101231773970332063","name":"Terraform","imageUrl":"https://img.stackshare.io/service/1276/default_2316907c4199f912e2ed79cbdb99025c9e5e2665.png","canonicalUrl":"/terraform","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231774519122717":{"id":"101231774519122717","name":"Grafana","imageUrl":"https://img.stackshare.io/service/2645/default_8f9d552b144493679449b16c79647da5787e808b.jpg","canonicalUrl":"/grafana","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773523090140":{"id":"101231773523090140","name":"Amazon RDS","imageUrl":"https://img.stackshare.io/service/232/amazon-rds.png","canonicalUrl":"/amazon-rds","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773418092710":{"id":"101231773418092710","name":"Amazon Route 53","imageUrl":"https://img.stackshare.io/service/38/amazon-route-53.png","canonicalUrl":"/amazon-route-53","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231773501041914":{"id":"101231773501041914","name":"CircleCI","imageUrl":"https://img.stackshare.io/service/190/CvqrSSFs_400x400.jpg","canonicalUrl":"/circleci","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231774492574471":{"id":"101231774492574471","name":"AWS Elastic Load Balancing (ELB)","imageUrl":"https://img.stackshare.io/service/2587/aws-elastic-load-balancing.png","canonicalUrl":"/aws-elastic-load-balancing","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773620969295":{"id":"101231773620969295","name":"Amazon CloudWatch","imageUrl":"https://img.stackshare.io/service/401/amazon-cloudwatch.png","canonicalUrl":"/amazon-cloudwatch","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773421016326":{"id":"101231773421016326","name":"Twilio SendGrid","imageUrl":"https://img.stackshare.io/service/43/kQ_6nwmP.jpg","canonicalUrl":"/twilio-sendgrid","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231773436512034":{"id":"101231773436512034","name":"Zendesk","imageUrl":"https://img.stackshare.io/service/70/ObVtJEgP_400x400.png","canonicalUrl":"/zendesk","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231776833491432":{"id":"101231776833491432","name":"Notion","imageUrl":"https://img.stackshare.io/service/6758/cbCR7w5R_400x400.jpg","canonicalUrl":"/notion","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231773416481916":{"id":"101231773416481916","name":"Salesforce Sales Cloud","imageUrl":"https://img.stackshare.io/service/35/lGZFUPOW.png","canonicalUrl":"/salesforce-sales-cloud","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231773419330893":{"id":"101231773419330893","name":"Namecheap","imageUrl":"https://img.stackshare.io/service/40/sSwMqqsH.png","canonicalUrl":"/namecheap","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231774801633884":{"id":"101231774801633884","name":"Adobe Photoshop","imageUrl":"https://img.stackshare.io/service/3176/lxVcZyci.jpg","canonicalUrl":"/adobe-photoshop","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231776473814866":{"id":"101231776473814866","name":"Zoom","imageUrl":"https://img.stackshare.io/service/6083/oD_oPSBP_400x400.jpg","canonicalUrl":"/zoom","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231775622314951":{"id":"101231775622314951","name":"Sketch","imageUrl":"https://img.stackshare.io/service/4561/default_6af179017eb5792be37441bc746e9cfd37814ea1.png","canonicalUrl":"/sketch","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231774314369014":{"id":"101231774314369014","name":"Pandas","imageUrl":"https://img.stackshare.io/service/2180/1284191.png","canonicalUrl":"/pandas","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231775236642254":{"id":"101231775236642254","name":"Chart.js","imageUrl":"https://img.stackshare.io/service/3866/_GD1-XrU_400x400.jpg","canonicalUrl":"/js-chart","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231774325781298":{"id":"101231774325781298","name":"Hotjar","imageUrl":"https://img.stackshare.io/service/2207/BoZ1jvob_400x400.jpg","canonicalUrl":"/hotjar","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231775409266236":{"id":"101231775409266236","name":"Microsoft 365","imageUrl":"https://img.stackshare.io/service/4167/icon.png","canonicalUrl":"/microsoft-365","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231774122434767":{"id":"101231774122434767","name":"GNU Bash","imageUrl":"https://img.stackshare.io/service/1673/bash-icon.png","canonicalUrl":"/gnu-bash","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231774491193670":{"id":"101231774491193670","name":"Tableau","imageUrl":"https://img.stackshare.io/service/2584/ZadESXl4_400x400.jpg","canonicalUrl":"/tableau","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231773873140185":{"id":"101231773873140185","name":"Sidekiq","imageUrl":"https://img.stackshare.io/service/1078/4b7277462dadad85454ab427ce3f0ca7.png","canonicalUrl":"/sidekiq","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773480426879":{"id":"101231773480426879","name":"Bugsnag","imageUrl":"https://img.stackshare.io/service/150/square-logo-small-midnight.png","canonicalUrl":"/bugsnag","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101986228309190940":{"id":"101986228309190940","name":"Miro","imageUrl":"https://img.stackshare.io/service/10825/1MYeZHg9_400x400.png","canonicalUrl":"/miro","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231775011822585":{"id":"101231775011822585","name":"Zeplin","imageUrl":"https://img.stackshare.io/service/3457/bro-lNVH_reasonably_small.png","canonicalUrl":"/zeplin","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231777411056834":{"id":"101231777411056834","name":"Amazon EKS","imageUrl":"https://img.stackshare.io/service/7991/amazon-eks.png","canonicalUrl":"/amazon-eks","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231776543564264":{"id":"101231776543564264","name":"Lerna","imageUrl":"https://img.stackshare.io/service/6207/OwqAUSQi_400x400.jpg","canonicalUrl":"/lerna","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773863068091":{"id":"101231773863068091","name":"Puma","imageUrl":"https://img.stackshare.io/service/1055/favicon.png","canonicalUrl":"/puma","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773948220612":{"id":"101231773948220612","name":"Medium","imageUrl":"https://img.stackshare.io/service/1225/default_d52ae2eca6f1250a4ce3c32b8a278dbfd7d428e9.jpg","canonicalUrl":"/medium","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231773441530720":{"id":"101231773441530720","name":"Papertrail","imageUrl":"https://img.stackshare.io/service/82/default_3accd6f46a6878fc4663003d9758e6d75bca9dd3.png","canonicalUrl":"/papertrail","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231775511817312":{"id":"101231775511817312","name":"Fluentd","imageUrl":"https://img.stackshare.io/service/4365/default_57243b6b4e5e35e73530f825a9fe28013e30812d.jpg","canonicalUrl":"/fluentd","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773825068049":{"id":"101231773825068049","name":"Packer","imageUrl":"https://img.stackshare.io/service/967/packer.png","canonicalUrl":"/packer","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773420308094":{"id":"101231773420308094","name":"GoDaddy","imageUrl":"https://img.stackshare.io/service/42/default_fe6434a2b381cb644610fabe7e72af9a2c57e571.jpg","canonicalUrl":"/godaddy","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231774419484644":{"id":"101231774419484644","name":"Google Ads","imageUrl":"https://img.stackshare.io/service/2408/UimQskO__400x400.jpg","canonicalUrl":"/google-ads","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231773507276914":{"id":"101231773507276914","name":"MongoLab","imageUrl":"https://img.stackshare.io/service/202/XOtbhFOC_400x400.jpg","canonicalUrl":"/mongolab","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773548003563":{"id":"101231773548003563","name":"Apiary","imageUrl":"https://img.stackshare.io/service/272/7b176017eab2903a23d914460b6dd600.jpeg","canonicalUrl":"/apiary","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231773532480458":{"id":"101231773532480458","name":"NetSuite","imageUrl":"https://img.stackshare.io/service/248/Xmp1cwhV_400x400.jpg","canonicalUrl":"/netsuite","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231773567487121":{"id":"101231773567487121","name":"Bitnami","imageUrl":"https://img.stackshare.io/service/292/9e00ada9691f6aab16668cfb9dfa2f1c.png","canonicalUrl":"/bitnami","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231774946495627":{"id":"101231774946495627","name":"Hootsuite","imageUrl":"https://img.stackshare.io/service/3391/cGUD9kwQ_400x400.png","canonicalUrl":"/hootsuite","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231773974171792":{"id":"101231773974171792","name":"OneLogin","imageUrl":"https://img.stackshare.io/service/1287/default_a92771775a16e9c640bdf7117c1f2ed966f4f96e.jpg","canonicalUrl":"/onelogin","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231777268592926":{"id":"101231777268592926","name":"Kinsta","imageUrl":"https://img.stackshare.io/service/7684/_DnsRtIX_400x400.jpg","canonicalUrl":"/kinsta","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231775035225500":{"id":"101231775035225500","name":"Delighted","imageUrl":"https://img.stackshare.io/service/3494/q_THssT5.png","canonicalUrl":"/delighted","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231776227933443":{"id":"101231776227933443","name":"GoToWebinar","imageUrl":"https://img.stackshare.io/service/5620/xDuCp54A_400x400.png","canonicalUrl":"/gotowebinar","layer":{"type":"id","generated":false,"id":"Layer:101231772948217612","typename":"Layer"},"__typename":"Tool"},"Tool:101231776677799043":{"id":"101231776677799043","name":"DocSend","imageUrl":"https://img.stackshare.io/service/6462/5fM1LkSf_400x400.png","canonicalUrl":"/docsend","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"$Company:102667275315628655.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.0":{"node":{"type":"id","generated":false,"id":"Stack:102667285811917238","typename":"Stack"},"__typename":"StackEdge"},"$Company:102667275315628655.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).pageInfo":{"endCursor":"MQ","hasNextPage":false,"__typename":"PageInfo"}}

RunaHR

RunaHR

20 Followers
100% cloud-based payroll & software built for companies in Latin America.

Decisions 1

Bryam Rodriguez

Shared insights
at

I'm working as one of the engineering leads in RunaHR. As our platform is a Saas, we thought It'd be good to have an API (We chose Ruby and Rails for this) and a SPA (built with React and Redux ) connected. We started the SPA with Create React App since It's pretty easy to start.

We use Jest as the testing framework and react-testing-library to test React components. In Rails we make tests using RSpec.

Our main database is PostgreSQL, but we also use MongoDB to store some type of data. We started to use Redis  for cache and other time sensitive operations.

We have a couple of extra projects: One is an Employee app built with React Native and the other is an internal back office dashboard built with Next.js for the client and Python in the backend side.

Since we have different frontend apps we have found useful to have Bit to document visual components and utils in JavaScript.

22 3.1M