
Concluído
Publicado
Pago na entrega
## Task #1: Camper Rental App with PayloadCMS 3 ### 1. Backend (Payload) Create a Payload 3 project with the following collections and Endpoints: ### Collections **Campers** - `name` - `features` - `pricePerDay` (Number) - `description` - `image` **Orders** - `fromDate` - `toDate` - `camper` (Relation) ### Endpoints - **Custom Endpoint**: Implement an API endpoint returning booking details per camper: ```tsx { [camperId: number]: Array<{ from: string to: string bookedUnits: number }> } ``` --- ### 2. Frontend ([login to view URL]) In the same project add the following pages and layouts using **shadcn/ui**, and **Tailwind CSS:** ### Pages - **Page 1: Camper List** - List all campers with `name`, `image` - **Page 2: Camper Details** - Full details including all fields (`features`, etc.) - Date picker for `from → to` - Price calculation based on selected date range - Ability to create an order (no payment/verification required) ### Layout - Shared layout with header/navigation --- ### 3. - **Seasonal Pricing**: Extend `pricePerDay` to support seasonal adjustments:`Array<{ from: Date; to: Date; price: number }>` - **Custom Component**: Use `[login to view URL]` (via `temporal-polyfill`) for recurring seasonal ranges:`Array<{ from: [login to view URL]; to: [login to view URL]; price: number }>` --- ## Task #2: Coupon Shuffle We aim to identify every conceivable combination of coupons, but there's a catch: each coupon is associated with multiple types (array of strings, termed `blockedTypes`) and if a coupon contains a specific type, no other coupon with the same type can be included in the combination. Your task is to compile a complete list of distinct possible combinations from a given list of coupons, ensuring there's no interference between them. Moreover, when one combination is a subset of another, prioritize the superset (the longest combination). For instance, if `[A, B]` is a combination, it would exclude `[A]` or `[B]` as individual entities. Focus here is on speed as this function gets called for each pricing calculation. ### Example A short example showing how coupons would be combined **Coupons** - Long term 5% (blocked types: `longterm` and `discount`) - Long term 10% (blocked types: `longterm` and `discount`) - Long term 15% (blocked types: `longterm` and `discount`) - WinterPromo (blocked types: `winter`) - Winterspecial 30d (blocked types: `longterm` and `winter`) - Winterspecial 60d (blocked types: `longterm` and `winter`) - Gift voucher (no blocked types) **Possible Combinations** - Long term 5% & WinterPromo & gift voucher - Long term 10% & WinterPromo & gift voucher - Long term 15% & WinterPromo & gift voucher - Winterspecial 30d & gift voucher - Winterspecial 60d & gift voucher ### Your code ```tsx export function getAllPossibleCouponCombinations< T extends { blockedTypes: Array<string> }, >(coupons: Array<T>): Array<Array<T>> { // your code here } ``` ### Tests Do not change the tests ```tsx import { getAllPossibleCouponCombinations } from '../[login to view URL]' describe('basics', () => { it(`blocks blocked types`, () => { const coupon1 = { blockedTypes: ['1'] } const coupon2 = { blockedTypes: ['1'] } const ret = getAllPossibleCouponCombinations([coupon1, coupon2]) expect(ret).toHaveLength(2) expect(ret).toContainEqual([coupon1]) expect(ret).toContainEqual([coupon2]) }) it(`combines coupons`, () => { const coupon1 = { blockedTypes: [] } const coupon2 = { blockedTypes: [] } const ret = getAllPossibleCouponCombinations([coupon1, coupon2]) expect(ret).toHaveLength(1) expect(ret).toContainEqual([login to view URL]([coupon1, coupon2])) }) it(`blocks multiple types`, () => { const coupon1 = { blockedTypes: ['1', '2'] } const coupon2 = { blockedTypes: ['1'] } const coupon3 = { blockedTypes: ['2'] } const ret = getAllPossibleCouponCombinations([coupon1, coupon2, coupon3]) expect(ret).toHaveLength(2) expect(ret).toContainEqual([coupon1]) expect(ret).toContainEqual([login to view URL]([coupon2, coupon3])) }) }) describe('complex', () => { it(`l, r l, r l, r f f, l f, l longterm1 longterm2 longterm3 coupon earlybird earlybird2, test * longterm1, coupon, test * longterm2, coupon, test * longterm3, coupon, test * earlybird1, test * earlybird2, test`, () => { const coupons = [ { blockedTypes: ['l', 'r'] }, { blockedTypes: ['l', 'r'] }, { blockedTypes: ['l', 'r'] }, { blockedTypes: ['f'] }, { blockedTypes: ['l', 'f'] }, { blockedTypes: ['l', 'f'] }, { blockedTypes: [] }, ] const ret = getAllPossibleCouponCombinations(coupons) expect(ret).toHaveLength(5) const groups = [ [0, 3, 6], [1, 3, 6], [2, 3, 6], [4, 6], [5, 6], ] for (const group of groups) { const groupCoupons = [login to view URL]((idx) => coupons[idx]) expect(ret).toContainEqual([login to view URL](groupCoupons)) } }) it(`l, r l, r l, r f f, l f, l r longterm1 longterm2 longterm3 coupon earlybird1 earlybird2, test * longterm1, coupon * longterm2, coupon * longterm3, coupon * coupon, test * earlybird1, test * earlybird2, test`, () => { const coupons = [ { blockedTypes: ['l', 'r'] }, { blockedTypes: ['l', 'r'] }, { blockedTypes: ['l', 'r'] }, { blockedTypes: ['f'] }, { blockedTypes: ['l', 'f'] }, { blockedTypes: ['l', 'f'] }, { blockedTypes: ['r'] }, ] const ret = getAllPossibleCouponCombinations(coupons) expect(ret).toHaveLength(6) const groups = [ [0, 3], [1, 3], [2, 3], [3, 6], [4, 6], [5, 6], ] for (const group of groups) { const groupCoupons = [login to view URL]((idx) => coupons[idx]) expect(ret).toContainEqual([login to view URL](groupCoupons)) } }) it(`l, r l, r l, r f f, l f, l f longterm1 longterm2 longterm3 coupon earlybird1 earlybird2, test * longterm1, coupon * longterm1, test * longterm2, coupon * longterm2, test * longterm3, coupon * longterm3, test * earlybird1 * earlybird2`, () => { const coupons = [ { blockedTypes: ['l', 'r'] }, { blockedTypes: ['l', 'r'] }, { blockedTypes: ['l', 'r'] }, { blockedTypes: ['f'] }, { blockedTypes: ['l', 'f'] }, { blockedTypes: ['l', 'f'] }, { blockedTypes: ['f'] }, ] const ret = getAllPossibleCouponCombinations(coupons) expect(ret).toHaveLength(8) const groups = [[0, 3], [0, 6], [1, 3], [1, 6], [2, 3], [2, 6], [4], [5]] for (const group of groups) { const groupCoupons = [login to view URL]((idx) => coupons[idx]) expect(ret).toContainEqual([login to view URL](groupCoupons)) } }) it(`l, r l, r l, r f f f, l f, l longterm1 longterm2 longterm3 coupon coupon2 earlybird1 earlybird2, test * longterm1, coupon, test * longterm1, coupon2, test * longterm2, coupon, test * longterm2, coupon2, test * longterm3, coupon, test * longterm3, coupon2, test * earlybird1, test * earlybird2, test`, () => { const coupons = [ { blockedTypes: ['l', 'r'] }, { blockedTypes: ['l', 'r'] }, { blockedTypes: ['l', 'r'] }, { blockedTypes: ['f'] }, { blockedTypes: ['f'] }, { blockedTypes: ['l', 'f'] }, { blockedTypes: ['l', 'f'] }, { blockedTypes: [] }, ] const ret = getAllPossibleCouponCombinations(coupons) expect(ret).toHaveLength(8) const groups = [ [0, 3, 7], [0, 4, 7], [1, 3, 7], [1, 4, 7], [2, 3, 7], [2, 4, 7], [5, 7], [6, 7], ] for (const group of groups) { const groupCoupons = [login to view URL]((idx) => coupons[idx]) expect(ret).toContainEqual([login to view URL](groupCoupons)) } }) }) ```
ID do Projeto: 40182711
69 propostas
Projeto remoto
Ativo há 1 mês
Defina seu orçamento e seu prazo
Seja pago pelo seu trabalho
Descreva sua proposta
É grátis para se inscrever e fazer ofertas em trabalhos

I can deliver both tasks end to end with clean, production-ready code and a strong focus on correctness and performance. For Task #1, I’ll set up PayloadCMS 3 with the required collections, custom booking endpoint, seasonal pricing (including [login to view URL]), and a [login to view URL] frontend using shadcn/ui + Tailwind, covering camper listing, details, date-based pricing, and order creation with a shared layout. For Task #2, I’ll implement a high-performance coupon-combination algorithm that respects blocked types, prioritizes longest valid combinations, and passes all provided tests without modification, optimized for frequent pricing calls. Ayan
€30 EUR em 1 dia
1,1
1,1
69 freelancers estão ofertando em média €156 EUR for esse trabalho

Hello! I'm excited about the opportunity to work on your Camper Rental App using PayloadCMS 3 and Next.js. From setting up the backend with necessary collections and custom API endpoints to crafting a seamless frontend experience with shadcn/ui and Tailwind CSS, I bring comprehensive expertise. Additionally, I have experience implementing complex pricing functionalities, such as seasonal adjustments and coupon combinations, ensuring efficient and scalable code solutions. Could you share more about how you envision the user interaction flow on the frontend? Also, do you have any particular design preferences or branding guidelines for the UI components? I'm eager to discuss how we can make this project a success together. Looking forward to our conversation!
€100 EUR em 2 dias
2,7
2,7

Hey , I just went through the project description, and I see you are looking for someone experienced in Tailwind CSS and Next.js. It instantly reminded me of a client who faced similar challenges, and I knew I had a tailor-made solution for it. Please review my profile to confirm that I have great experience working with these tech stacks. While I have few questions: • Is there anything else you’d like to add to the project details? • What’s the top hurdle you’re facing with this project? • What is the timeline to get this done? Why Choose Me? 250+ Projects. 5 Years. Zero Misses. My reputation is built on a single metric: Flawless Execution. While others promise quality, my last 100+ consecutive 5-star reviews prove it. I don’t just finish the job; I set the standard. Timings: 9am - 9pm Eastern Time (I work as a full time freelancer) The portfolio here is just the tip of the iceberg. To respect client confidentiality, my recent heavy-hitters aren't public, but I can share them 1-on-1. Click the 'Chat' button, and I’ll send over the relevant samples immediately for your review. Regards, Abdul Haseeb Siddiqui.
€30 EUR em 5 dias
0,0
0,0

Hello, Thank you so much for posting this opportunity it sounds like a great fit, and I’d love to be part of it! I’ve worked on similar projects before, and I’m confident I can bring real value to your project. I’m passionate about what I do and always aim to deliver work that’s not only high-quality but also makes things easier and smoother for my clients. Feel free to take a quick look at my profile to see some of the work I’ve done in the past. If it feels like a good match, I’d be happy to chat further about your project and how I can help bring it to life. I’m available to get started right away and will give this project my full attention from day one. Let’s connect and see how we can make this a success together! Looking forward to hearing from you soon. Kind Regards, Abhishek Saini
€250 EUR em 7 dias
0,0
0,0

Hi, I'm excited about the opportunity to develop a camper rental platform using PayloadCMS and Next.js. With extensive experience in building dynamic applications using these technologies, I can efficiently set up the backend collections for campers and orders as specified, ensuring a smooth data flow. For the frontend, I will create an intuitive camper list and detailed pages leveraging shadcn/ui with Tailwind CSS, providing users with a seamless experience. I will also implement the custom endpoint for booking details, as well as seasonal pricing adjustments and coupon combinations to enhance functionality and user engagement. I propose a timeline of 14 days to complete this project. I am confident in delivering high-quality results, and I'm eager to discuss any further specifications. Thanks,
€250 EUR em 14 dias
0,0
0,0

Sfax, Tunisia
Método de pagamento verificado
Membro desde out. 20, 2018
€8-30 EUR
€8-30 EUR
€8-30 EUR
€8-30 EUR
€8-30 EUR
$25-50 USD / hora
₹20000-25000 INR
$10-30 USD
$5000-10000 USD
₹12500-37500 INR
₹1500-12500 INR
$30-250 USD
₹750-1250 INR / hora
$30-250 USD
$30-250 USD
€3000-5000 EUR
$250-750 USD
₹1500-12500 INR
$5000-75000 USD
₹500000-1000000 INR
₹12500-37500 INR
₹12500-37500 INR
$25-50 USD / hora
$30-250 USD
£1500-3000 GBP