⚠Please indicate a total package price. Other proposals will not be considered.
Context
The project involves developing and integrating several modules for a PrestaShop store specializing in precious metals sales (gold, silver, platinum, palladium). The objective is to provide an optimal user experience, dynamic pricing based on real-time metal prices, and advanced features for customers and administrators.
All developed elements must perfectly align with the existing website's graphic charter, and the site must maintain a fast loading time (less than 3 seconds).
1. Integration of a Third-Party API for Precious Metal Prices
The objective of this phase is to install and configure a third-party API to retrieve real-time prices for the following precious metals: gold, silver, platinum, and palladium.
📄 API Documentation
Detailed documentation is provided for using the API (see attached document "Reseller.API.doc"). This API offers REST endpoints to retrieve price data in different currencies and from several sources.
✅ Tasks to Complete
- Implement a periodic update system:
- Define an optimal refresh frequency considering API call limits.
- Store retrieved data in a database or cache to avoid excessive calls.
- Expose data internally:
- Create an internal endpoint or service for easy access to retrieved data.
- Ensure compatibility with other modules using this information.
⚠️ Constraints and Recommendations
- Respect API call limitations (e.g., rate limit of 1000 requests/day).
- Implement a cache system to limit API usage.
- Manage API errors and unavailability by providing fallback solutions (e.g., saving the last valid rates).
- Ensure a fast response time to avoid slowing down the site.
- Secure API calls with authentication keys and use HTTPS.
The next project phases will depend on the successful integration of this API.
2. Metal Price Update Banner (Top Header)
Objective: Display real-time precious metal prices (gold, silver, platinum, palladium) with their respective variations.
Technical Specifications:
- Integration of a third-party API (e.g., https://www.goldavenue.com/) to retrieve real-time metal prices.
- Display of prices in a banner at the top of each page of the site.
- Automatic price updates every 60 seconds (configurable).
- Display of percentage variations (positive in green, negative in red).
- Implementation of a fallback in case of API error (display of the last available prices).
✅ Tasks to Complete
- Design the banner:
- Define a design consistent with the graphic charter.
- Ensure smooth and non-intrusive integration.
- Optimize performance:
- Use asynchronous loading to avoid slowdowns.
- Implement a temporary cache of retrieved data.
- Test and validate:
- Verify display on desktop, mobile, and tablet.
- Test data updates and interface responsiveness.
Constraints:
- The banner must be responsive and adapt to all devices (desktop, tablet, mobile).
- The solution must be lightweight to avoid impacting site performance.
- Updates must be smooth without complete page reload.
- The module must be compatible with other site elements (no interference with other scripts or plugins).
3. Development of Dynamic Pricing
Objective: Enable dynamic product pricing based on several criteria, particularly metal prices.
Technical Specifications:
- Creation of a dynamic pricing module based on 7 criteria:
- Metal (gold, silver, platinum, palladium).
- Weight (in grams, ounces, etc.).
- Metal content (e.g., 24 karat, 18 karat).
- Purity (e.g., 99.9%).
- VAT (variable rate depending on the country).
- Manufacturing price (transformation cost).
- Professional margin (fixed or variable margin).
4. Creation of a Customized Client Dashboard
Objective: Provide customers with a personalized space to track their investments and orders.
Technical Specifications:
- Order history: Display of past orders with details (date, amount, status, etc.).
- Purchase portfolio: Visualization of purchased metals with their weight, purity, and purchase price.
- Investment value: Calculation and display of the current portfolio value based on real-time metal prices.
- Portfolio variation: Display of positive or negative variation based on purchase price and current price (in percentage and absolute value).
Constraints:
- The dashboard must be accessible from the PrestaShop customer account.
- Data must be updated in real-time (or near real-time) via the metal price API.
5. Sales Module for Clients
Objective: Allow customers to initiate a request to sell their metals directly from their customer account.
Technical Specifications:
- Addition of a "Sell" button on the product page.
- Display of the selling price based on the current metal price.
- Sales request form with the following fields:
- Metal weight.
- Metal type.
- Customer contact information.
- Request validation by the administrator via the backoffice:
- Ability to adjust the selling price.
- Ability to reject the request with reason.
- Automated email notifications:
- Notification to the customer upon request submission.
- Notification to the customer upon validation or rejection of the request.
- Notification to the administrator upon submission of a new request.
Constraints:
- The module must be smoothly integrated into the existing interface.
- Notifications must be configurable from the backoffice (content, recipients, etc.).
6. Automatic Product Price Updates
Objective: Automatically update product prices based on the spot price of precious metals.
Technical Specifications:
- Integration of the metal price API to retrieve spot prices.
- Automatic product price updates every X minutes (configurable).
- Price gap management (e.g., if the price varies by more than X%, an alert is sent to the administrator).
Constraints:
- Price updates must not impact site performance.
- Old prices must be saved in a history for reference.
7. Storage Options at Checkout
Objective: Offer two storage options to customers during checkout.
Technical Specifications:
- Free port: Secure storage option in a fiscal warehouse.
- Home delivery: Standard delivery option with tracking.
- Display of options at checkout with associated costs.
Constraints:
- Options must be configurable from the backoffice (activation/deactivation, costs, etc.).
8. Perishable Orders for Wire Transfer Payments
Objective: Manage unpaid orders within a 48-hour timeframe.
Technical Specifications:
- Customer notification at checkout that the order is perishable (explanation + 48h countdown).
- Administrator notification by email when a perishable order is created.
- Automatic cancellation of unpaid orders after 48 hours.
- Ability to manually extend the deadline from the backoffice.
Constraints:
- The system must be robust and handle customers' time zones.
9. KYC (Know Your Customer) Form
Objective: Implement a KYC form for transactions exceeding €10,000 or cumulative over a calendar year.
Technical Specifications:
- Automatic triggering of the KYC form when a customer's cumulative purchases exceed €10,000 in the calendar year.
- Creation of a dedicated page for document submission (ID card, passport, etc.).
- Backoffice interface for verification and approval of documents by administrators.
- Customer notification once KYC is approved or rejected.
Constraints:
- The system must comply with current regulations (e.g., GDPR).
- Documents must be stored securely.
10. Design and Integration
Objective: Ensure smooth integration and consistent design with existing elements.
Technical Specifications:
- Respect for existing design (colors, fonts, etc.).
- Responsive integration for all devices.
- Performance optimization (loading time, etc.).
11. Testing and Validation
Objective: Ensure the quality and stability of developed features.
Technical Specifications:
- Unit and functional tests for each module.
- Performance tests to ensure real-time updates do not impact site performance.
- Validation by the business team before production deployment.
12. Expected Deliverables
- Commented and documented source code.
- Technical documentation for each module.
- User documentation for administrators and customers.
- Deployment plan and rollback in case of error.