الصفحة الرئيسية البحرين Senior Full-Stack Product Developer
الصفحة الرئيسية البحرين Senior Full-Stack Product Developer
Senior Full-Stack Product Developer
تفاصيل الوظيفة
At Freshly Commerce , we’re hiring a Senior Full-Stack Developer (Ruby on Rails + React)to help grow our 3 Shopify apps for brands and retailers globally, like Glossier, Sennheiser, and Godiva. Our apps simplify operational complexities like inventory management, order fulfillment, and perishables traceability.
We're a small but mighty team, supporting over 15,000 businesses. Bootstrapped and profitable, we're scrappy in our approach to learn and adapt quickly, yet we take great care in the work we deliver. If this sounds like the kind of place you'd like to work, we'd love to hear from you. About this role In this role, you'll have significant ownership of your work, make impactful decisions daily, and report directly to the founders. This is a full-time remote position open to candidates in all timezones. You’ll be responsible for expanding our product offering, finding solutions to things that aren’t working, and solving complex problems in logistics and supply chain. As one of our first product hires, you'll learn the ins and outs of a fast-growing SaaS product. Here are your daily tasks in this job:
- Independently manage projects from initial, rough designs to final implementation, including creating task lists in Linear, breaking down PRs into manageable, deployable code segments, testing in staging, deploying to production, and monitoring app performance post-deployment.
- Prioritize and handle timely dependency upgrades in our applications with the same enthusiasm as greenfield projects, recognizing their importance in maintaining app security and enhancing user experience.
- Assist our incredible support team with merchant questions in Slack and take pleasure in providing solutions.
- Effectively communicate your progress and collaborate on problem-solving using digital tools like Slack and GitHub PRs.
- Rapidly learn and adopt a product development mindset, considering automated tests essential for building confidence in your code.
- Support your team members and customers whenever needed. As a close-knit team, we thrive when we help each other.
- Adapt to changing priorities and manage multiple tasks simultaneously.
- Stay calm under pressure, especially when faced with multiple Rollbar errors, a full Sidekiq queue, or app downtime alerts.
- Be comfortable working from home, using Slack as our main form of communication.
- 4+ years of experience with Ruby on Rails
- Experience with React, including hooks and context APIs
- Experience with Shopify REST and GraphQL APIs is a plus
- Experience with Shopify CLI and Theme app extension development is a plus
- Familiarity with Rust is a plus
- Ruby on Rails
- PostgreSQL
- React
- Shopify's Polaris design system
- Redis for caching and background queues
- Sidekiq for background processing
- Heroku for application hosting
- Resourcefulness : You are relentlessly resourceful, always finding a way to achieve the highest standards of quality. You know where to look and whom to consult when faced with challenges, understanding that we always support each other.
- Ownership : You take complete ownership and pride in your work. This means deeply understanding our users' problems and how new features or updates affect them.
- Communication : You effectively communicate your progress, challenges, checklists, and pull requests, detailing them in Linear or GitHub PR descriptions to keep the rest of the team informed. Effective communication is crucial in our fully remote and asynchronous team environment.
Apply safely
To stay safe in your job search, information on common scams and to get free expert advice, we recommend that you visit SAFERjobs, a non-profit, joint industry and law enforcement organization working to combat job scams.
Notice (8): Use of undefined constant border - assumed 'border' [APP/View/Jobs/externalview.ctp, line 206]Code Context'title'=> empty($job['Company']['hideName']) ? $job['Company']['name'] : 'Confidential Company',
'alt'=> empty($job['Company']['hideName']) ? $job['Company']['name'] : 'Confidential Company',
border=>"0"
$viewFile = '/var/www/html/laimoon/View/Jobs/externalview.ctp' $dataForView = array( 'uaPopup' => '', 'Urls' => array( 'providers' => 'https://providers.laimoon.com', 'recruiters' => 'https://partners.laimoon.com', 'canonical' => 'https://jobs.laimoon.com', 'courses' => 'https://courses.laimoon.com', '7days' => 'http://courses.7daysindubai.com', 'careers' => 'http://careers.7daysindubai.com', 'careerguide' => 'https://laimoon.com', 'jobs' => 'https://jobs.laimoon.com', 'cms' => 'http://cms.laimoon.com', 'profiles' => 'https://profiles.laimoon.com' ), 'availLocations' => array( 'uae' => array( 'name' => 'UAE', 'country_id' => '2', 'country_code' => 'ae', 'slug' => 'uae', 'global_location_id' => '225', 'rel_gloc_ids' => '251,250,249,248,247,246,245,244,225', 'currency' => 'AED', 'currency_name' => 'UAE Dirham', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Dubai', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'saudi' => array( 'name' => 'Saudi Arabia', 'country_id' => '183', 'country_code' => 'sa', 'slug' => 'saudi', 'global_location_id' => '187', 'rel_gloc_ids' => '274,273,272,271,269,268,267,266,265,264,263,262,261,260,259,258,257,256,255,254,253,187', 'currency' => 'SAR', 'currency_name' => 'Saudi Riyal', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Riyadh', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'india' => array( 'name' => 'India', 'country_id' => '99', 'country_code' => 'in', 'slug' => 'india', 'global_location_id' => '100', 'rel_gloc_ids' => '100,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,976,994,1263,1264', 'currency' => 'INR', 'currency_name' => 'Indian Rupee', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Kolkata', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'south-africa' => array( 'name' => 'South Africa', 'country_id' => '236', 'country_code' => 'za', 'slug' => 'south-africa', 'global_location_id' => '197', 'rel_gloc_ids' => '197,498,499,500,501,502,503,504', 'currency' => 'ZAR', 'currency_name' => 'South African Rand', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Africa/Johannesburg', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'egypt' => array( 'name' => 'Egypt', 'country_id' => '61', 'country_code' => 'eg', 'slug' => 'egypt', 'global_location_id' => '64', 'rel_gloc_ids' => '64,955,957,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115', 'currency' => 'EGP', 'currency_name' => 'Egyptian pound', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Africa/Cairo', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'singapore' => array( 'name' => 'Singapore', 'country_id' => '188', 'country_code' => 'sg', 'slug' => 'singapore', 'global_location_id' => '192', 'rel_gloc_ids' => '192,382,432,438,445,453', 'currency' => 'SGD', 'currency_name' => 'Singapore Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Singapore', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'qatar' => array( 'name' => 'Qatar', 'country_id' => '178', 'country_code' => 'qa', 'slug' => 'qatar', 'global_location_id' => '176', 'rel_gloc_ids' => '176,252', 'currency' => 'QAR', 'currency_name' => 'Qatar Rial', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Qatar', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'pakistan' => array( 'name' => 'Pakistan', 'country_id' => '169', 'country_code' => 'pk', 'slug' => 'pakistan', 'global_location_id' => '164', 'rel_gloc_ids' => '164,979,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071', 'currency' => 'PKR', 'currency_name' => 'Pakistani rupee', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Karachi', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'kuwait' => array( 'name' => 'Kuwait', 'country_id' => '116', 'country_code' => 'kw', 'slug' => 'kuwait', 'global_location_id' => '116', 'rel_gloc_ids' => '116,276,277,278,279,280,281', 'currency' => 'KWD', 'currency_name' => 'Kuwait Dinar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Kuwait', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'oman' => array( 'name' => 'Oman', 'country_id' => '163', 'country_code' => 'om', 'slug' => 'oman', 'global_location_id' => '163', 'rel_gloc_ids' => '163,282,283,284,285,286,287,288,289,290,291', 'currency' => 'OMR', 'currency_name' => 'Oman Rial', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Muscat', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'jordan' => array( 'name' => 'Jordan', 'country_id' => '106', 'country_code' => 'jo', 'slug' => 'jordan', 'global_location_id' => '110', 'rel_gloc_ids' => '110,958,959,1101,1247,1246,1245,1244,1243,1242,1241,1240,1239', 'currency' => 'JOD', 'currency_name' => 'Jordanian Dinar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Amman', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'philippines' => array( 'name' => 'Philippines', 'country_id' => '168', 'country_code' => 'ph', 'slug' => 'philippines', 'global_location_id' => '171', 'rel_gloc_ids' => '171,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,1262', 'currency' => 'PHP', 'currency_name' => 'Philippine Peso', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Manila', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'bahrain' => array( 'name' => 'Bahrain', 'country_id' => '23', 'country_code' => 'bh', 'slug' => 'bahrain', 'global_location_id' => '17', 'rel_gloc_ids' => '17,292,293,294,295,314,297,298,299,300,301,302,303,304,1276,1277', 'currency' => 'BHD', 'currency_name' => 'Bahrain Dinar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Bahrain', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'sri-lanka' => array( 'name' => 'Sri Lanka', 'country_id' => '123', 'country_code' => 'lk', 'slug' => 'sri-lanka', 'global_location_id' => '200', 'rel_gloc_ids' => '200,1047,1048,1049,1084,1085,1086', 'currency' => 'LKR', 'currency_name' => 'Sri Lankan rupee', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Colombo', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'united-kingdom' => array( 'name' => 'United Kingdom', 'country_id' => '74', 'country_code' => 'gb', 'slug' => 'united-kingdom', 'global_location_id' => '226', 'rel_gloc_ids' => '226,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1050,1259,1260,1261,1267', 'currency' => 'GBP', 'currency_name' => 'British Pound', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/London', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'malaysia' => array( 'name' => 'Malaysia', 'country_id' => '149', 'country_code' => 'my', 'slug' => 'malaysia', 'global_location_id' => '131', 'rel_gloc_ids' => '131,131,980,1051', 'currency' => 'MYR', 'currency_name' => 'Ringgit', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Kuala_Lumpur', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'nepal' => array( 'name' => 'Nepal', 'country_id' => '159', 'country_code' => 'np', 'slug' => 'nepal', 'global_location_id' => '151', 'rel_gloc_ids' => '151,981,1096,1097,1098', 'currency' => 'NPR', 'currency_name' => 'Nepalese Rupee', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Kathmandu', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'nigeria' => array( 'name' => 'Nigeria', 'country_id' => '155', 'country_code' => 'ng', 'slug' => 'nigeria', 'global_location_id' => '158', 'rel_gloc_ids' => '158,995,996,997,1095', 'currency' => 'NGN', 'currency_name' => 'Nigerian Naira', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Africa/Lagos ', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'newzealand' => array( 'name' => 'New Zealand', 'country_id' => '162', 'country_code' => 'nz', 'slug' => 'newzealand', 'global_location_id' => '155', 'rel_gloc_ids' => '155,998,999,1080,1081,1082,1083', 'currency' => 'NZD', 'currency_name' => 'New Zealand Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Pacific/Auckland', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'brasil' => array( 'name' => 'Brasil', 'country_id' => '29', 'country_code' => 'br', 'slug' => 'brasil', 'global_location_id' => '30', 'rel_gloc_ids' => '30,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013', 'currency' => 'BRL', 'currency_name' => 'Brazilian Real', 'languages' => 'pt', 'default_language' => 'pt', 'country_time_zone' => 'America/Sao_Paulo', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'portugal' => array( 'name' => 'Portugal', 'country_id' => '175', 'country_code' => 'pt', 'slug' => 'portugal', 'global_location_id' => '174', 'rel_gloc_ids' => '174,1014,1015,1087,1088,1089,1090', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'pt', 'default_language' => 'pt', 'country_time_zone' => 'Europe/Lisbon', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'canada' => array( 'name' => 'Canada', 'country_id' => '36', 'country_code' => 'ca', 'slug' => 'canada', 'global_location_id' => '38', 'rel_gloc_ids' => '38,1019,1020,1021,1022,1023,1024,1025', 'currency' => 'CAD', 'currency_name' => 'Canadian Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Canada/Saskatchewan', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'united-states' => array( 'name' => 'United States', 'country_id' => '221', 'country_code' => 'us', 'slug' => 'united-states', 'global_location_id' => '227', 'rel_gloc_ids' => '227,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326', 'currency' => 'USD', 'currency_name' => 'US Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'America/New_York', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'angola' => array( 'name' => 'Angola', 'country_id' => '9', 'country_code' => 'ao', 'slug' => 'angola', 'global_location_id' => '6', 'rel_gloc_ids' => '6,1016,1091,1092,1093,1094', 'currency' => 'AOA', 'currency_name' => 'Angolan Kwanza', 'languages' => 'pt', 'default_language' => 'pt', 'country_time_zone' => 'Africa/Luanda', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'australia' => array( 'name' => 'Australia', 'country_id' => '14', 'country_code' => 'au', 'slug' => 'australia', 'global_location_id' => '13', 'rel_gloc_ids' => '13,1026,1027,1028,1029,1030', 'currency' => 'AUD', 'currency_name' => 'Australian Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Australia/Melbourne', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'kenya' => array( 'name' => 'Kenya', 'country_id' => '108', 'country_code' => 'ke', 'slug' => 'kenya', 'global_location_id' => '112', 'rel_gloc_ids' => '112,1031,1032,1075,1076,1077,1078,1079', 'currency' => 'KES', 'currency_name' => 'Kenyan Shilling', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Africa/Nairobi', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'ghana' => array( 'name' => 'Ghana', 'country_id' => '78', 'country_code' => 'gh', 'slug' => 'ghana', 'global_location_id' => '83', 'rel_gloc_ids' => '83,1033,1034,1072,1073,1074', 'currency' => 'GHS', 'currency_name' => 'Ghanaian Cedi', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Africa/Accra', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'ireland' => array( 'name' => 'Ireland', 'country_id' => '98', 'country_code' => 'ie', 'slug' => 'ireland', 'global_location_id' => '104', 'rel_gloc_ids' => '104,104,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Dublin', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'vietnam' => array( 'name' => 'Vietnam', 'country_id' => '229', 'country_code' => 'vn', 'slug' => 'vietnam', 'global_location_id' => '234', 'rel_gloc_ids' => '234,1170,1171', 'currency' => 'VND', 'currency_name' => 'Vietnamese Dong', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Ho_Chi_Minh', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'cyprus' => array( 'name' => 'Cyprus', 'country_id' => '51', 'country_code' => 'cy', 'slug' => 'cyprus', 'global_location_id' => '55', 'rel_gloc_ids' => '55,1230,1231,1232,1233', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Nicosia', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'malta' => array( 'name' => 'Malta', 'country_id' => '144', 'country_code' => 'mt', 'slug' => 'malta', 'global_location_id' => '134', 'rel_gloc_ids' => '134,1255,1254,1253,1252,1251,1250,1249,1248', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Malta', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'maldives' => array( 'name' => 'Maldives', 'country_id' => '146', 'country_code' => 'mv', 'slug' => 'maldives', 'global_location_id' => '132', 'rel_gloc_ids' => '132,1172', 'currency' => 'MVR', 'currency_name' => 'Maldivian rufiyaa', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Indian/Maldives', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'turkey' => array( 'name' => 'Turkey', 'country_id' => '213', 'country_code' => 'tr', 'slug' => 'turkey', 'global_location_id' => '219', 'rel_gloc_ids' => '219,1173,1174,1175,1176', 'currency' => 'TRY', 'currency_name' => 'Turkish lira', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Istanbul', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'thailand' => array( 'name' => 'Thailand', 'country_id' => '206', 'country_code' => 'th', 'slug' => 'thailand', 'global_location_id' => '213', 'rel_gloc_ids' => '213,1177', 'currency' => 'THB', 'currency_name' => 'Baht', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Bangkok', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'hong-kong' => array( 'name' => 'Hong Kong', 'country_id' => '91', 'country_code' => 'hk', 'slug' => 'hong-kong', 'global_location_id' => '97', 'rel_gloc_ids' => '97', 'currency' => 'HKD', 'currency_name' => 'Hong Kong dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Hong_Kong', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'germany' => array( 'name' => 'Germany', 'country_id' => '53', 'country_code' => 'de', 'slug' => 'germany', 'global_location_id' => '82', 'rel_gloc_ids' => '82,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Berlin', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'netherlands' => array( 'name' => 'Netherlands', 'country_id' => '157', 'country_code' => 'nl', 'slug' => 'netherlands', 'global_location_id' => '152', 'rel_gloc_ids' => '152,1188,1189,1190,1191,1192,1193', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Amsterdam', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'japan' => array( 'name' => 'Japan', 'country_id' => '107', 'country_code' => 'jp', 'slug' => 'japan', 'global_location_id' => '108', 'rel_gloc_ids' => '108,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337', 'currency' => 'YEN', 'currency_name' => 'Japanese yen', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Search Results Web results Asia/Tokyo', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'global' => array( 'name' => 'Global', 'country_id' => (int) 251, 'country_code' => 'on', 'slug' => 'global', 'global_location_id' => '275', 'rel_gloc_ids' => '275', 'currency' => 'USD', 'currency_name' => 'US Dollar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => null, 'job_location' => '0', 'published' => '1', 'show' => '1' ) ), 'currentLocation' => array( 'name' => 'Bahrain', 'country_id' => '23', 'country_code' => 'bh', 'slug' => 'bahrain', 'global_location_id' => '17', 'rel_gloc_ids' => '17,292,293,294,295,314,297,298,299,300,301,302,303,304,1276,1277', 'currency' => 'BHD', 'currency_name' => 'Bahrain Dinar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Bahrain', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'cityLists' => array( (int) 0 => array( 'name' => 'Dubai', 'slug' => 'dubai' ), (int) 1 => array( 'name' => 'Abu Dhabi', 'slug' => 'abu-dhabi' ), (int) 2 => array( 'name' => 'Ras al Khaimah', 'slug' => 'ras-al-khaimah' ), (int) 3 => array( 'name' => 'Al Ain', 'slug' => 'al-ain' ), (int) 4 => array( 'name' => 'Sharjah', 'slug' => 'sharjah' ), (int) 5 => array( 'name' => 'Fujairah', 'slug' => 'fujairah' ), (int) 6 => array( 'name' => 'Ajman', 'slug' => 'ajman' ), (int) 7 => array( 'name' => 'Umm Al Quwain', 'slug' => 'umm-al-quwain' ) ), 'menuState' => 'loggedoutmenu', 'showCVReviewLink' => true, 'profileInfo' => array( 'locations' => array( (int) 2 => 'UAE' ), 'searchKey' => '', 'guest' => (int) 1, 'jobCount' => '11146', 'contributedJobCount' => '24', 'courseCount' => null ), 'environment' => 'production', 'langUrlPrefix' => 'ar/', 'langUrl' => 'https://jobs.laimoon.com/ar/', 'themeUrl' => 'https://jobs.laimoon.com/', 'siteUrl' => 'https://jobs.laimoon.com/', 'staticUrl' => 'https://cdn.laimoon.com/jobs/', 'langCode' => 'ar', 'pageScripts' => array( (int) 0 => 'page_script' ), 'pageName' => 'externalview', 'courseUrl' => 'https://courses.laimoon.com/ar/', 'onlineCourses' => array(), 'job' => array( 'Job' => array( 'id' => '43508603', 'contact_id' => '3773199', 'recruiter_id' => '74726', 'job_function_id' => null, 'title' => 'Senior Full-Stack Product Developer', 'vacancies' => null, 'job_type_id' => null, 'description' => null, 'pay_status' => 'Free', 'external_job_description' => '<p> At  Freshly Commerce , we’re hiring a <b> Senior Full-Stack Developer (Ruby on Rails + React)</b>to help grow our 3 Shopify apps for brands and retailers globally, like Glossier, Sennheiser, and Godiva. Our apps simplify operational complexities like inventory management, order fulfillment, and perishables traceability. <p> We're a small but mighty team, supporting over 15,000 businesses. Bootstrapped and profitable, we're scrappy in our approach to learn and adapt quickly, yet we take great care in the work we deliver. </p><p> If this sounds like the kind of place you'd like to work, we'd love to hear from you. </p><p> </p><p><b> About this role </b></p><p> In this role, you'll have significant ownership of your work, make impactful decisions daily, and report directly to the founders. This is a full-time remote position open to candidates in all timezones. </p><p> You’ll be responsible for expanding our product offering, finding solutions to things that aren’t working, and solving complex problems in logistics and supply chain. As one of our first product hires, you'll learn the ins and outs of a fast-growing SaaS product. </p><p> </p><p><b> Here are your daily tasks in this job: </b></p><ul><li> Independently manage projects from initial, rough designs to final implementation, including creating task lists in Linear, breaking down PRs into manageable, deployable code segments, testing in staging, deploying to production, and monitoring app performance post-deployment. </li><li> Prioritize and handle timely dependency upgrades in our applications with the same enthusiasm as greenfield projects, recognizing their importance in maintaining app security and enhancing user experience. </li><li> Assist our incredible support team with merchant questions in Slack and take pleasure in providing solutions. </li><li> Effectively communicate your progress and collaborate on problem-solving using digital tools like Slack and GitHub PRs. </li><li> Rapidly learn and adopt a product development mindset, considering automated tests essential for building confidence in your code. </li><li> Support your team members and customers whenever needed. As a close-knit team, we thrive when we help each other. </li><li> Adapt to changing priorities and manage multiple tasks simultaneously. </li><li> Stay calm under pressure, especially when faced with multiple Rollbar errors, a full Sidekiq queue, or app downtime alerts. </li><li> Be comfortable working from home, using Slack as our main form of communication. </li></ul><p> </p><p><strong> Qualifications </strong></p><ul><li>4+ years of experience with Ruby on Rails </li><li> Experience with React, including hooks and context APIs </li><li> Experience with Shopify REST and GraphQL APIs is a plus </li><li> Experience with Shopify CLI and Theme app extension development is a plus </li><li> Familiarity with Rust is a plus </li></ul><p> </p><p><strong> Our stack </strong></p><ul><li> Ruby on Rails </li><li> PostgreSQL </li><li> React </li><li> Shopify's Polaris design system </li><li> Redis for caching and background queues </li><li> Sidekiq for background processing </li><li> Heroku for application hosting </li></ul><p> </p><p><strong> Who you are </strong></p><p> Experience is key in this role. We’d love to know the extent of your experience with Rails and React as a combined tech stack. Can you provide insights into how you've set up Rails and React projects in the past? Are there any specific projects that could serve as a testament to your skills and capabilities?</p><p> We're particularly interested in your experience with Shopify API, Shopify CLI, or GraphQL API. Even if these experiences are not part of your repertoire, we value your expertise with integrations on other platforms. If available, we’d love if you can share any public app or API documentation from those platforms. </p><p> </p><p> Beyond technical expertise, success in this role means embodying these three core values: </p><ol><li><b> Resourcefulness </b> : You are relentlessly resourceful, always finding a way to achieve the highest standards of quality. You know where to look and whom to consult when faced with challenges, understanding that we always support each other. </li><li><b> Ownership </b> : You take complete ownership and pride in your work. This means deeply understanding our users' problems and how new features or updates affect them. </li><li><b> Communication </b> : You effectively communicate your progress, challenges, checklists, and pull requests, detailing them in Linear or GitHub PR descriptions to keep the rest of the team informed. Effective communication is crucial in our fully remote and asynchronous team environment. </li></ol>', 'course_qualifications' => null, 'global_location_id' => '17', 'gender' => '0', 'baseSalary' => null, 'salary_duration' => 'Monthly', 'job_type' => 'Full time', 'salaryFrom' => null, 'salaryTo' => null, 'currency_id' => null, 'hide_salary' => '0', 'benefits' => null, 'salary_type_id' => null, 'travel_type_id' => null, 'travel_id' => null, 'education_id' => null, 'education_background' => null, 'language_id' => null, 'position_level_id' => null, 'position_type' => null, 'number_of_staffs_mange' => null, 'experiance' => null, 'sales_experience' => null, 'sales_focus' => null, 'sales_cycle_id' => null, 'reporting_to' => null, 'otherAssignments' => null, 'otherConsiderations' => null, 'ideal_candidate' => null, 'company_info' => null, 'company_id' => '30372', 'company_name' => 'AEROTEK', 'external_apply_url' => 'https://bh.jooble.org/external/-6067969659048959865?cpc=d0FU&utm_source=affiliate&utm_medium=laimoon_organic_bh&extra_ars_request_id=67493c58fcb734a4847a54585afbd8f2', 'external_short_url' => '6067969659048959865', 'apply_url' => null, 'contributed' => '0', 'created' => '2024-05-08 03:22:21', 'published' => '2024-05-08 03:22:21', 'closed_time' => null, 'updated' => '2024-05-08 03:22:21', 'hideCompany' => null, 'hide_contact_info' => '0', 'application_count' => '0', 'closed' => '0', 'draft' => '0', 'rejected' => '0', 'deleted' => '0', 'moderated' => '1', 'boosted' => '0', 'rejectnote' => null, 'job_extended' => '0', 'purchased' => '0', 'seeder_id' => '113', 'source_id' => 'jooble', 'course_keywords' => null, 'shortlist_magic_applied' => '0', 'shortlist_magic_keywords' => null, 'living_in' => '0', 'age_limit' => null, 'is_managerial' => '0', 'application_email' => null, 'quality_score' => null, 'reopened' => '0', 'quality_type' => 'White', 'promoted' => '0' ), 'Recruiter' => array( 'first_name' => 'Jooble Jobs', 'last_name' => null, 'recruiter_type' => 'company' ), 'GlobalLocation' => array( 'id' => '17', 'display_name' => 'Bahrain', 'name_ar' => 'البحرين', 'country_id' => '23', 'Country' => array( [maximum depth reached] ) ), 'Company' => array( 'id' => '30372', 'name' => 'Aerotek', 'website' => 'http://www.globallex.com.au', 'verified' => '0', 'photo' => '58eaa00f-d82c-4478-b242-13320a00004d_Aerotek.jpg', 'details' => '<p>Since our founding, Aerotek has grown to become one of the top global recruiting and staffing agencies.</p><p>Over the past three decades we've built an unrivaled culture and our unique, people-focused approach yields competitive advantage for our clients and rewarding careers for our contractors. Today we serve virtually every major industry, and we've placed exceptional people in hundreds of thousands of roles and positions. Everything we do is grounded in our guiding principles to build and nurture quality relationships that allow us to place quality people in quality jobs.</p>', 'display_details' => '' ), 'Industry' => array(), 'Tag' => array() ), 'jobsList' => array(), 'courses' => array(), 'promotedCourses' => array(), 'referer' => '/', 'urlKeyword' => 'Senior ', 'profile' => array( 'locations' => array( (int) 2 => 'UAE' ), 'searchKey' => '', 'guest' => (int) 1, 'jobCount' => '11146', 'contributedJobCount' => '24', 'courseCount' => null ), 'askLogin' => true, 'jobLinkTitle' => 'Senior ', 'renderSchema' => 'yes', 'title_for_layout' => 'Senior Full-Stack Product Developer jobs in Aerotek in Bahrain.', 'page_description' => 'Apply to Senior Full-Stack Product Developer jobs in Aerotek in Bahrain.Find similar vacancies, jobs and salary information in Bahrain.', 'locationForTitle' => 'Bahrain', 'currentJobCity' => array( 'id' => '17', 'display_name' => 'Bahrain', 'name_ar' => 'البحرين', 'country_id' => '23', 'Country' => array( 'name' => 'Bahrain', 'id' => '23', 'slug' => 'bahrain', 'code' => 'BH' ) ), 'jobCompanyPage' => array( 'CompanyPage' => array( 'id' => '2723', 'title' => 'Aerotek', 'slug' => 'aerotek' ), 'CompanyPageTranslation' => array( 'id' => null, 'company_page_id' => null, 'title' => null, 'slug' => null, 'summary' => null, 'description' => null, 'meta_title' => null, 'meta_description' => null, 'meta_keywords' => null, 'company_matching_keywords' => null, 'draft' => null, 'lang_code' => null ) ), 'location' => 'Bahrain', 'breadCrumbs' => array( 'Job Details' => '' ), 'relCourseBanner' => array( 'title' => 'Senior , Full Stack ', 'relatedUrl' => 'https://courses.laimoon.com/ar/search/Senior | Full Stack ', 'course_category_id' => '', 'relatedOnlineUrl' => 'https://courses.laimoon.com/ar/search/Senior | Full Stack ?fromloc=online&' ), 'published' => '2024-05-08 03:22:21', 'daysleft' => (float) 14, 'isLoggedIn' => false, 'facebookSession' => null, 'fbConfig' => array( 'AppId' => '151651858238476', 'APIKey' => '1c032aa6c89b302e8ec5dea94dc89104', 'AppSecret' => 'f2b69d3a25fe65601f146efe7178e72a' ), 'linkedInConfig' => array( 'APIKey' => '779yus3aqi524z', 'AppSecret' => 'XCdGJxUokce5Ygf6' ), 'criticalCSSes' => array( 'jobdetail' => 'jobdetail-critical-css', 'companylist' => 'companylist-critical-css', 'companyview' => 'companyview-critical-css', 'agencylist' => 'agencylist-critical-css', 'agencyview' => 'agencyview-critical-css', 'laimoonverified' => 'laimoonverified-critical-css', 'seopages' => 'seopages-critical-css', 'externalview' => 'externalview-critical-css', 'popularjobsearches' => 'popularjobsearches-critical-css' ), 'basicProfileIncomplete' => true ) $uaPopup = '' $Urls = array( 'providers' => 'https://providers.laimoon.com', 'recruiters' => 'https://partners.laimoon.com', 'canonical' => 'https://jobs.laimoon.com', 'courses' => 'https://courses.laimoon.com', '7days' => 'http://courses.7daysindubai.com', 'careers' => 'http://careers.7daysindubai.com', 'careerguide' => 'https://laimoon.com', 'jobs' => 'https://jobs.laimoon.com', 'cms' => 'http://cms.laimoon.com', 'profiles' => 'https://profiles.laimoon.com' ) $availLocations = array( 'uae' => array( 'name' => 'UAE', 'country_id' => '2', 'country_code' => 'ae', 'slug' => 'uae', 'global_location_id' => '225', 'rel_gloc_ids' => '251,250,249,248,247,246,245,244,225', 'currency' => 'AED', 'currency_name' => 'UAE Dirham', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Dubai', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'saudi' => array( 'name' => 'Saudi Arabia', 'country_id' => '183', 'country_code' => 'sa', 'slug' => 'saudi', 'global_location_id' => '187', 'rel_gloc_ids' => '274,273,272,271,269,268,267,266,265,264,263,262,261,260,259,258,257,256,255,254,253,187', 'currency' => 'SAR', 'currency_name' => 'Saudi Riyal', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Riyadh', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'india' => array( 'name' => 'India', 'country_id' => '99', 'country_code' => 'in', 'slug' => 'india', 'global_location_id' => '100', 'rel_gloc_ids' => '100,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,976,994,1263,1264', 'currency' => 'INR', 'currency_name' => 'Indian Rupee', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Kolkata', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'south-africa' => array( 'name' => 'South Africa', 'country_id' => '236', 'country_code' => 'za', 'slug' => 'south-africa', 'global_location_id' => '197', 'rel_gloc_ids' => '197,498,499,500,501,502,503,504', 'currency' => 'ZAR', 'currency_name' => 'South African Rand', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Africa/Johannesburg', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'egypt' => array( 'name' => 'Egypt', 'country_id' => '61', 'country_code' => 'eg', 'slug' => 'egypt', 'global_location_id' => '64', 'rel_gloc_ids' => '64,955,957,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115', 'currency' => 'EGP', 'currency_name' => 'Egyptian pound', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Africa/Cairo', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'singapore' => array( 'name' => 'Singapore', 'country_id' => '188', 'country_code' => 'sg', 'slug' => 'singapore', 'global_location_id' => '192', 'rel_gloc_ids' => '192,382,432,438,445,453', 'currency' => 'SGD', 'currency_name' => 'Singapore Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Singapore', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'qatar' => array( 'name' => 'Qatar', 'country_id' => '178', 'country_code' => 'qa', 'slug' => 'qatar', 'global_location_id' => '176', 'rel_gloc_ids' => '176,252', 'currency' => 'QAR', 'currency_name' => 'Qatar Rial', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Qatar', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'pakistan' => array( 'name' => 'Pakistan', 'country_id' => '169', 'country_code' => 'pk', 'slug' => 'pakistan', 'global_location_id' => '164', 'rel_gloc_ids' => '164,979,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071', 'currency' => 'PKR', 'currency_name' => 'Pakistani rupee', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Karachi', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'kuwait' => array( 'name' => 'Kuwait', 'country_id' => '116', 'country_code' => 'kw', 'slug' => 'kuwait', 'global_location_id' => '116', 'rel_gloc_ids' => '116,276,277,278,279,280,281', 'currency' => 'KWD', 'currency_name' => 'Kuwait Dinar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Kuwait', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'oman' => array( 'name' => 'Oman', 'country_id' => '163', 'country_code' => 'om', 'slug' => 'oman', 'global_location_id' => '163', 'rel_gloc_ids' => '163,282,283,284,285,286,287,288,289,290,291', 'currency' => 'OMR', 'currency_name' => 'Oman Rial', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Muscat', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'jordan' => array( 'name' => 'Jordan', 'country_id' => '106', 'country_code' => 'jo', 'slug' => 'jordan', 'global_location_id' => '110', 'rel_gloc_ids' => '110,958,959,1101,1247,1246,1245,1244,1243,1242,1241,1240,1239', 'currency' => 'JOD', 'currency_name' => 'Jordanian Dinar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Amman', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'philippines' => array( 'name' => 'Philippines', 'country_id' => '168', 'country_code' => 'ph', 'slug' => 'philippines', 'global_location_id' => '171', 'rel_gloc_ids' => '171,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,1262', 'currency' => 'PHP', 'currency_name' => 'Philippine Peso', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Manila', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'bahrain' => array( 'name' => 'Bahrain', 'country_id' => '23', 'country_code' => 'bh', 'slug' => 'bahrain', 'global_location_id' => '17', 'rel_gloc_ids' => '17,292,293,294,295,314,297,298,299,300,301,302,303,304,1276,1277', 'currency' => 'BHD', 'currency_name' => 'Bahrain Dinar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Bahrain', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'sri-lanka' => array( 'name' => 'Sri Lanka', 'country_id' => '123', 'country_code' => 'lk', 'slug' => 'sri-lanka', 'global_location_id' => '200', 'rel_gloc_ids' => '200,1047,1048,1049,1084,1085,1086', 'currency' => 'LKR', 'currency_name' => 'Sri Lankan rupee', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Colombo', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'united-kingdom' => array( 'name' => 'United Kingdom', 'country_id' => '74', 'country_code' => 'gb', 'slug' => 'united-kingdom', 'global_location_id' => '226', 'rel_gloc_ids' => '226,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1050,1259,1260,1261,1267', 'currency' => 'GBP', 'currency_name' => 'British Pound', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/London', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'malaysia' => array( 'name' => 'Malaysia', 'country_id' => '149', 'country_code' => 'my', 'slug' => 'malaysia', 'global_location_id' => '131', 'rel_gloc_ids' => '131,131,980,1051', 'currency' => 'MYR', 'currency_name' => 'Ringgit', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Kuala_Lumpur', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'nepal' => array( 'name' => 'Nepal', 'country_id' => '159', 'country_code' => 'np', 'slug' => 'nepal', 'global_location_id' => '151', 'rel_gloc_ids' => '151,981,1096,1097,1098', 'currency' => 'NPR', 'currency_name' => 'Nepalese Rupee', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Kathmandu', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'nigeria' => array( 'name' => 'Nigeria', 'country_id' => '155', 'country_code' => 'ng', 'slug' => 'nigeria', 'global_location_id' => '158', 'rel_gloc_ids' => '158,995,996,997,1095', 'currency' => 'NGN', 'currency_name' => 'Nigerian Naira', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Africa/Lagos ', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'newzealand' => array( 'name' => 'New Zealand', 'country_id' => '162', 'country_code' => 'nz', 'slug' => 'newzealand', 'global_location_id' => '155', 'rel_gloc_ids' => '155,998,999,1080,1081,1082,1083', 'currency' => 'NZD', 'currency_name' => 'New Zealand Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Pacific/Auckland', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'brasil' => array( 'name' => 'Brasil', 'country_id' => '29', 'country_code' => 'br', 'slug' => 'brasil', 'global_location_id' => '30', 'rel_gloc_ids' => '30,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013', 'currency' => 'BRL', 'currency_name' => 'Brazilian Real', 'languages' => 'pt', 'default_language' => 'pt', 'country_time_zone' => 'America/Sao_Paulo', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'portugal' => array( 'name' => 'Portugal', 'country_id' => '175', 'country_code' => 'pt', 'slug' => 'portugal', 'global_location_id' => '174', 'rel_gloc_ids' => '174,1014,1015,1087,1088,1089,1090', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'pt', 'default_language' => 'pt', 'country_time_zone' => 'Europe/Lisbon', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'canada' => array( 'name' => 'Canada', 'country_id' => '36', 'country_code' => 'ca', 'slug' => 'canada', 'global_location_id' => '38', 'rel_gloc_ids' => '38,1019,1020,1021,1022,1023,1024,1025', 'currency' => 'CAD', 'currency_name' => 'Canadian Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Canada/Saskatchewan', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'united-states' => array( 'name' => 'United States', 'country_id' => '221', 'country_code' => 'us', 'slug' => 'united-states', 'global_location_id' => '227', 'rel_gloc_ids' => '227,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326', 'currency' => 'USD', 'currency_name' => 'US Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'America/New_York', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'angola' => array( 'name' => 'Angola', 'country_id' => '9', 'country_code' => 'ao', 'slug' => 'angola', 'global_location_id' => '6', 'rel_gloc_ids' => '6,1016,1091,1092,1093,1094', 'currency' => 'AOA', 'currency_name' => 'Angolan Kwanza', 'languages' => 'pt', 'default_language' => 'pt', 'country_time_zone' => 'Africa/Luanda', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'australia' => array( 'name' => 'Australia', 'country_id' => '14', 'country_code' => 'au', 'slug' => 'australia', 'global_location_id' => '13', 'rel_gloc_ids' => '13,1026,1027,1028,1029,1030', 'currency' => 'AUD', 'currency_name' => 'Australian Dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Australia/Melbourne', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'kenya' => array( 'name' => 'Kenya', 'country_id' => '108', 'country_code' => 'ke', 'slug' => 'kenya', 'global_location_id' => '112', 'rel_gloc_ids' => '112,1031,1032,1075,1076,1077,1078,1079', 'currency' => 'KES', 'currency_name' => 'Kenyan Shilling', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Africa/Nairobi', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'ghana' => array( 'name' => 'Ghana', 'country_id' => '78', 'country_code' => 'gh', 'slug' => 'ghana', 'global_location_id' => '83', 'rel_gloc_ids' => '83,1033,1034,1072,1073,1074', 'currency' => 'GHS', 'currency_name' => 'Ghanaian Cedi', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Africa/Accra', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'ireland' => array( 'name' => 'Ireland', 'country_id' => '98', 'country_code' => 'ie', 'slug' => 'ireland', 'global_location_id' => '104', 'rel_gloc_ids' => '104,104,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Dublin', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'vietnam' => array( 'name' => 'Vietnam', 'country_id' => '229', 'country_code' => 'vn', 'slug' => 'vietnam', 'global_location_id' => '234', 'rel_gloc_ids' => '234,1170,1171', 'currency' => 'VND', 'currency_name' => 'Vietnamese Dong', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Ho_Chi_Minh', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'cyprus' => array( 'name' => 'Cyprus', 'country_id' => '51', 'country_code' => 'cy', 'slug' => 'cyprus', 'global_location_id' => '55', 'rel_gloc_ids' => '55,1230,1231,1232,1233', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Nicosia', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'malta' => array( 'name' => 'Malta', 'country_id' => '144', 'country_code' => 'mt', 'slug' => 'malta', 'global_location_id' => '134', 'rel_gloc_ids' => '134,1255,1254,1253,1252,1251,1250,1249,1248', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Malta', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'maldives' => array( 'name' => 'Maldives', 'country_id' => '146', 'country_code' => 'mv', 'slug' => 'maldives', 'global_location_id' => '132', 'rel_gloc_ids' => '132,1172', 'currency' => 'MVR', 'currency_name' => 'Maldivian rufiyaa', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Indian/Maldives', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'turkey' => array( 'name' => 'Turkey', 'country_id' => '213', 'country_code' => 'tr', 'slug' => 'turkey', 'global_location_id' => '219', 'rel_gloc_ids' => '219,1173,1174,1175,1176', 'currency' => 'TRY', 'currency_name' => 'Turkish lira', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Istanbul', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'thailand' => array( 'name' => 'Thailand', 'country_id' => '206', 'country_code' => 'th', 'slug' => 'thailand', 'global_location_id' => '213', 'rel_gloc_ids' => '213,1177', 'currency' => 'THB', 'currency_name' => 'Baht', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Bangkok', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'hong-kong' => array( 'name' => 'Hong Kong', 'country_id' => '91', 'country_code' => 'hk', 'slug' => 'hong-kong', 'global_location_id' => '97', 'rel_gloc_ids' => '97', 'currency' => 'HKD', 'currency_name' => 'Hong Kong dollar', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Asia/Hong_Kong', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'germany' => array( 'name' => 'Germany', 'country_id' => '53', 'country_code' => 'de', 'slug' => 'germany', 'global_location_id' => '82', 'rel_gloc_ids' => '82,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Berlin', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'netherlands' => array( 'name' => 'Netherlands', 'country_id' => '157', 'country_code' => 'nl', 'slug' => 'netherlands', 'global_location_id' => '152', 'rel_gloc_ids' => '152,1188,1189,1190,1191,1192,1193', 'currency' => 'EUR', 'currency_name' => 'Euro', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Europe/Amsterdam', 'job_location' => '0', 'published' => '1', 'show' => '1' ), 'japan' => array( 'name' => 'Japan', 'country_id' => '107', 'country_code' => 'jp', 'slug' => 'japan', 'global_location_id' => '108', 'rel_gloc_ids' => '108,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337', 'currency' => 'YEN', 'currency_name' => 'Japanese yen', 'languages' => 'en', 'default_language' => 'en', 'country_time_zone' => 'Search Results Web results Asia/Tokyo', 'job_location' => '1', 'published' => '1', 'show' => '1' ), 'global' => array( 'name' => 'Global', 'country_id' => (int) 251, 'country_code' => 'on', 'slug' => 'global', 'global_location_id' => '275', 'rel_gloc_ids' => '275', 'currency' => 'USD', 'currency_name' => 'US Dollar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => null, 'job_location' => '0', 'published' => '1', 'show' => '1' ) ) $currentLocation = array( 'name' => 'Bahrain', 'country_id' => '23', 'country_code' => 'bh', 'slug' => 'bahrain', 'global_location_id' => '17', 'rel_gloc_ids' => '17,292,293,294,295,314,297,298,299,300,301,302,303,304,1276,1277', 'currency' => 'BHD', 'currency_name' => 'Bahrain Dinar', 'languages' => 'en,ar', 'default_language' => 'en', 'country_time_zone' => 'Asia/Bahrain', 'job_location' => '1', 'published' => '1', 'show' => '1' ) $cityLists = array( (int) 0 => array( 'name' => 'Dubai', 'slug' => 'dubai' ), (int) 1 => array( 'name' => 'Abu Dhabi', 'slug' => 'abu-dhabi' ), (int) 2 => array( 'name' => 'Ras al Khaimah', 'slug' => 'ras-al-khaimah' ), (int) 3 => array( 'name' => 'Al Ain', 'slug' => 'al-ain' ), (int) 4 => array( 'name' => 'Sharjah', 'slug' => 'sharjah' ), (int) 5 => array( 'name' => 'Fujairah', 'slug' => 'fujairah' ), (int) 6 => array( 'name' => 'Ajman', 'slug' => 'ajman' ), (int) 7 => array( 'name' => 'Umm Al Quwain', 'slug' => 'umm-al-quwain' ) ) $menuState = 'loggedoutmenu' $showCVReviewLink = true $profileInfo = array( 'locations' => array( (int) 2 => 'UAE' ), 'searchKey' => '', 'guest' => (int) 1, 'jobCount' => '11146', 'contributedJobCount' => '24', 'courseCount' => null ) $environment = 'production' $langUrlPrefix = 'ar/' $langUrl = 'https://jobs.laimoon.com/ar/' $themeUrl = 'https://jobs.laimoon.com/' $siteUrl = 'https://jobs.laimoon.com/' $staticUrl = 'https://cdn.laimoon.com/jobs/' $langCode = 'ar' $pageScripts = array( (int) 0 => 'page_script' ) $pageName = 'externalview' $courseUrl = 'https://courses.laimoon.com/ar/' $onlineCourses = array() $job = array( 'Job' => array( 'id' => '43508603', 'contact_id' => '3773199', 'recruiter_id' => '74726', 'job_function_id' => null, 'title' => 'Senior Full-Stack Product Developer', 'vacancies' => null, 'job_type_id' => null, 'description' => null, 'pay_status' => 'Free', 'external_job_description' => '<p> At  Freshly Commerce , we’re hiring a <b> Senior Full-Stack Developer (Ruby on Rails + React)</b>to help grow our 3 Shopify apps for brands and retailers globally, like Glossier, Sennheiser, and Godiva. Our apps simplify operational complexities like inventory management, order fulfillment, and perishables traceability. <p> We're a small but mighty team, supporting over 15,000 businesses. Bootstrapped and profitable, we're scrappy in our approach to learn and adapt quickly, yet we take great care in the work we deliver. </p><p> If this sounds like the kind of place you'd like to work, we'd love to hear from you. </p><p> </p><p><b> About this role </b></p><p> In this role, you'll have significant ownership of your work, make impactful decisions daily, and report directly to the founders. This is a full-time remote position open to candidates in all timezones. </p><p> You’ll be responsible for expanding our product offering, finding solutions to things that aren’t working, and solving complex problems in logistics and supply chain. As one of our first product hires, you'll learn the ins and outs of a fast-growing SaaS product. </p><p> </p><p><b> Here are your daily tasks in this job: </b></p><ul><li> Independently manage projects from initial, rough designs to final implementation, including creating task lists in Linear, breaking down PRs into manageable, deployable code segments, testing in staging, deploying to production, and monitoring app performance post-deployment. </li><li> Prioritize and handle timely dependency upgrades in our applications with the same enthusiasm as greenfield projects, recognizing their importance in maintaining app security and enhancing user experience. </li><li> Assist our incredible support team with merchant questions in Slack and take pleasure in providing solutions. </li><li> Effectively communicate your progress and collaborate on problem-solving using digital tools like Slack and GitHub PRs. </li><li> Rapidly learn and adopt a product development mindset, considering automated tests essential for building confidence in your code. </li><li> Support your team members and customers whenever needed. As a close-knit team, we thrive when we help each other. </li><li> Adapt to changing priorities and manage multiple tasks simultaneously. </li><li> Stay calm under pressure, especially when faced with multiple Rollbar errors, a full Sidekiq queue, or app downtime alerts. </li><li> Be comfortable working from home, using Slack as our main form of communication. </li></ul><p> </p><p><strong> Qualifications </strong></p><ul><li>4+ years of experience with Ruby on Rails </li><li> Experience with React, including hooks and context APIs </li><li> Experience with Shopify REST and GraphQL APIs is a plus </li><li> Experience with Shopify CLI and Theme app extension development is a plus </li><li> Familiarity with Rust is a plus </li></ul><p> </p><p><strong> Our stack </strong></p><ul><li> Ruby on Rails </li><li> PostgreSQL </li><li> React </li><li> Shopify's Polaris design system </li><li> Redis for caching and background queues </li><li> Sidekiq for background processing </li><li> Heroku for application hosting </li></ul><p> </p><p><strong> Who you are </strong></p><p> Experience is key in this role. We’d love to know the extent of your experience with Rails and React as a combined tech stack. Can you provide insights into how you've set up Rails and React projects in the past? Are there any specific projects that could serve as a testament to your skills and capabilities?</p><p> We're particularly interested in your experience with Shopify API, Shopify CLI, or GraphQL API. Even if these experiences are not part of your repertoire, we value your expertise with integrations on other platforms. If available, we’d love if you can share any public app or API documentation from those platforms. </p><p> </p><p> Beyond technical expertise, success in this role means embodying these three core values: </p><ol><li><b> Resourcefulness </b> : You are relentlessly resourceful, always finding a way to achieve the highest standards of quality. You know where to look and whom to consult when faced with challenges, understanding that we always support each other. </li><li><b> Ownership </b> : You take complete ownership and pride in your work. This means deeply understanding our users' problems and how new features or updates affect them. </li><li><b> Communication </b> : You effectively communicate your progress, challenges, checklists, and pull requests, detailing them in Linear or GitHub PR descriptions to keep the rest of the team informed. Effective communication is crucial in our fully remote and asynchronous team environment. </li></ol>', 'course_qualifications' => null, 'global_location_id' => '17', 'gender' => '0', 'baseSalary' => null, 'salary_duration' => 'Monthly', 'job_type' => 'Full time', 'salaryFrom' => null, 'salaryTo' => null, 'currency_id' => null, 'hide_salary' => '0', 'benefits' => null, 'salary_type_id' => null, 'travel_type_id' => null, 'travel_id' => null, 'education_id' => null, 'education_background' => null, 'language_id' => null, 'position_level_id' => null, 'position_type' => null, 'number_of_staffs_mange' => null, 'experiance' => null, 'sales_experience' => null, 'sales_focus' => null, 'sales_cycle_id' => null, 'reporting_to' => null, 'otherAssignments' => null, 'otherConsiderations' => null, 'ideal_candidate' => null, 'company_info' => null, 'company_id' => '30372', 'company_name' => 'AEROTEK', 'external_apply_url' => 'https://bh.jooble.org/external/-6067969659048959865?cpc=d0FU&utm_source=affiliate&utm_medium=laimoon_organic_bh&extra_ars_request_id=67493c58fcb734a4847a54585afbd8f2', 'external_short_url' => '6067969659048959865', 'apply_url' => null, 'contributed' => '0', 'created' => '2024-05-08 03:22:21', 'published' => '2024-05-08 03:22:21', 'closed_time' => null, 'updated' => '2024-05-08 03:22:21', 'hideCompany' => null, 'hide_contact_info' => '0', 'application_count' => '0', 'closed' => '0', 'draft' => '0', 'rejected' => '0', 'deleted' => '0', 'moderated' => '1', 'boosted' => '0', 'rejectnote' => null, 'job_extended' => '0', 'purchased' => '0', 'seeder_id' => '113', 'source_id' => 'jooble', 'course_keywords' => null, 'shortlist_magic_applied' => '0', 'shortlist_magic_keywords' => null, 'living_in' => '0', 'age_limit' => null, 'is_managerial' => '0', 'application_email' => null, 'quality_score' => null, 'reopened' => '0', 'quality_type' => 'White', 'promoted' => '0' ), 'Recruiter' => array( 'first_name' => 'Jooble Jobs', 'last_name' => null, 'recruiter_type' => 'company' ), 'GlobalLocation' => array( 'id' => '17', 'display_name' => 'Bahrain', 'name_ar' => 'البحرين', 'country_id' => '23', 'Country' => array( 'name' => 'Bahrain', 'id' => '23', 'slug' => 'bahrain', 'code' => 'BH' ) ), 'Company' => array( 'id' => '30372', 'name' => 'Aerotek', 'website' => 'http://www.globallex.com.au', 'verified' => '0', 'photo' => '58eaa00f-d82c-4478-b242-13320a00004d_Aerotek.jpg', 'details' => '<p>Since our founding, Aerotek has grown to become one of the top global recruiting and staffing agencies.</p><p>Over the past three decades we've built an unrivaled culture and our unique, people-focused approach yields competitive advantage for our clients and rewarding careers for our contractors. Today we serve virtually every major industry, and we've placed exceptional people in hundreds of thousands of roles and positions. Everything we do is grounded in our guiding principles to build and nurture quality relationships that allow us to place quality people in quality jobs.</p>', 'display_details' => '' ), 'Industry' => array(), 'Tag' => array() ) $jobsList = array() $courses = array() $promotedCourses = array() $referer = '/' $urlKeyword = 'Senior ' $profile = array( 'locations' => array( (int) 2 => 'UAE' ), 'searchKey' => '', 'guest' => (int) 1, 'jobCount' => '11146', 'contributedJobCount' => '24', 'courseCount' => null ) $askLogin = true $jobLinkTitle = 'Senior ' $renderSchema = 'yes' $title_for_layout = 'Senior Full-Stack Product Developer jobs in Aerotek in Bahrain.' $page_description = 'Apply to Senior Full-Stack Product Developer jobs in Aerotek in Bahrain.Find similar vacancies, jobs and salary information in Bahrain.' $locationForTitle = 'Bahrain' $currentJobCity = array( 'id' => '17', 'display_name' => 'Bahrain', 'name_ar' => 'البحرين', 'country_id' => '23', 'Country' => array( 'name' => 'Bahrain', 'id' => '23', 'slug' => 'bahrain', 'code' => 'BH' ) ) $jobCompanyPage = array( 'CompanyPage' => array( 'id' => '2723', 'title' => 'Aerotek', 'slug' => 'aerotek' ), 'CompanyPageTranslation' => array( 'id' => null, 'company_page_id' => null, 'title' => null, 'slug' => null, 'summary' => null, 'description' => null, 'meta_title' => null, 'meta_description' => null, 'meta_keywords' => null, 'company_matching_keywords' => null, 'draft' => null, 'lang_code' => null ) ) $location = 'Bahrain' $breadCrumbs = array( 'Job Details' => '' ) $relCourseBanner = array( 'title' => 'Senior , Full Stack ', 'relatedUrl' => 'https://courses.laimoon.com/ar/search/Senior | Full Stack ', 'course_category_id' => '', 'relatedOnlineUrl' => 'https://courses.laimoon.com/ar/search/Senior | Full Stack ?fromloc=online&' ) $published = '2024-05-08 03:22:21' $daysleft = (float) 14 $isLoggedIn = false $facebookSession = null $fbConfig = array( 'AppId' => '151651858238476', 'APIKey' => '1c032aa6c89b302e8ec5dea94dc89104', 'AppSecret' => 'f2b69d3a25fe65601f146efe7178e72a' ) $linkedInConfig = array( 'APIKey' => '779yus3aqi524z', 'AppSecret' => 'XCdGJxUokce5Ygf6' ) $criticalCSSes = array( 'jobdetail' => 'jobdetail-critical-css', 'companylist' => 'companylist-critical-css', 'companyview' => 'companyview-critical-css', 'agencylist' => 'agencylist-critical-css', 'agencyview' => 'agencyview-critical-css', 'laimoonverified' => 'laimoonverified-critical-css', 'seopages' => 'seopages-critical-css', 'externalview' => 'externalview-critical-css', 'popularjobsearches' => 'popularjobsearches-critical-css' ) $basicProfileIncomplete = true $seeAllJobLink = 'https://jobs.laimoon.com/ar/bahrain/Senior ' $csaKeywords = array( (int) 0 => 'Senior Full-Stack Product Developer' ) $allowLoginClass = 'notlogin' $jobLocSlug = 'bahrain' $jobLocName = 'Bahrain' $pfBackgrounds = '' $jobLink = 'https://jobs.laimoon.com/jobs/externalview/43508603' $companyName = ' at Aerotek' $twitterText = 'Hiring now! Senior Full-Stack Product Developer at Aerotek. Please apply or share https://jobs.laimoon.com/jobs/externalview/43508603' $emailText = 'Hiring now! Senior Full-Stack Product Developer at Aerotek. Please apply or share by clicking here https://jobs.laimoon.com/jobs/externalview/43508603' $sCompanyName = false $csaSearchKey = 'Senior Full-Stack Product Developer' $jobDetails = 'تفاصيل الوظيفة' $btn_text = 'Apply on company website' $confidentialExists = false $showCompany = (int) 1 $mainCheck = (int) 1 $confidentialThumbClass = '' $cdnImageThumbPath = 'https://cdn.laimoon.com/profileimages/thumbnail/' $companyPageTitle = 'Aerotek'include - APP/View/Jobs/externalview.ctp, line 206 View::_evaluate() - CORE/Cake/View/View.php, line 948 View::_render() - CORE/Cake/View/View.php, line 910 View::render() - CORE/Cake/View/View.php, line 471 Controller::render() - CORE/Cake/Controller/Controller.php, line 948 Dispatcher::_invoke() - CORE/Cake/Routing/Dispatcher.php, line 194 Dispatcher::dispatch() - CORE/Cake/Routing/Dispatcher.php, line 162 [main] - APP/webroot/index.php, line 115
الشركة المعلنة عن الوظيفة
Aerotek
Since our founding, Aerotek has grown to become one of the top global recruiting and staffing agencies.
Over the past three decades we've built an unrivaled culture and our unique, people-focused approach yields competitive advantage for our clients and rewarding careers for our contractors. Today we serve virtually every major industry, and we've placed exceptional people in hundreds of thousands of roles and positions. Everything we do is grounded in our guiding principles to build and nurture quality relationships that allow us to place quality people in quality jobs.
لماذا تقوم بالإبلاغ عن هذه الوظيفة؟
Job has expired لا يمكن عرض هذه الصفحةبدلًا من ذلك، يمكنك النقر على الرابط أدناه أو نسخ/لصق الرابط في متصفح الإنترنت الخاص بك.
https://bh.jooble.org/external/-6067969659048959865?cpc=d0FU&utm_source=affiliate&utm_medium=laimoon_organic_bh&extra_ars_request_id=67493c58fcb734a4847a54585afbd8f2