Shopify Integration
Astrology-powered e-commerce
Use Cases
Gemstone Recommendations
Suggest gemstones based on birth chart
Lucky Products
Products matched to zodiac signs
Auspicious Purchase Days
Show best days to buy based on panchang
Personalized Gifts
Gift suggestions by recipient's sign
Shopify App Setup
// server.js - Shopify App Backend
import express from 'express';
import { VedikaClient } from '@anthropic/vedika-sdk';
const app = express();
const vedika = new VedikaClient();
// Gemstone recommendations based on birth chart
app.post('/api/gemstone-recommendations', async (req, res) => {
const { birthDate, birthTime, latitude, longitude } = req.body;
const chart = await vedika.birthChart({
datetime: `${birthDate}T${birthTime}:00`,
latitude,
longitude
});
// Map planets to gemstones
const gemstoneMap = {
Sun: { gemstone: 'Ruby', metal: 'Gold' },
Moon: { gemstone: 'Pearl', metal: 'Silver' },
Mars: { gemstone: 'Red Coral', metal: 'Gold' },
Mercury: { gemstone: 'Emerald', metal: 'Gold' },
Jupiter: { gemstone: 'Yellow Sapphire', metal: 'Gold' },
Venus: { gemstone: 'Diamond', metal: 'Platinum' },
Saturn: { gemstone: 'Blue Sapphire', metal: 'Silver' },
Rahu: { gemstone: 'Hessonite', metal: 'Silver' },
Ketu: { gemstone: 'Cat\'s Eye', metal: 'Silver' }
};
// Find weak planets that need strengthening
const recommendations = chart.planets
.filter(p => p.isDebilitated || p.isCombust)
.map(p => ({
planet: p.name,
reason: p.isDebilitated ? 'Debilitated' : 'Combust',
...gemstoneMap[p.name]
}));
// Also recommend based on ascendant lord
const ascendantLord = chart.houses[0].signLord;
recommendations.unshift({
planet: ascendantLord,
reason: 'Ascendant Lord - Primary Recommendation',
...gemstoneMap[ascendantLord]
});
res.json({ recommendations });
});
Theme Liquid Snippet
<!-- snippets/vedika-zodiac-selector.liquid -->
<div class="vedika-zodiac-selector">
<h3>Shop by Zodiac Sign</h3>
<div class="zodiac-grid">
{% assign signs = "aries,taurus,gemini,cancer,leo,virgo,libra,scorpio,sagittarius,capricorn,aquarius,pisces" | split: "," %}
{% for sign in signs %}
<a href="/collections/{{ sign }}" class="zodiac-item">
<img src="{{ sign | append: '.svg' | asset_url }}" alt="{{ sign }}">
<span>{{ sign | capitalize }}</span>
</a>
{% endfor %}
</div>
</div>
<!-- snippets/vedika-birth-chart-form.liquid -->
<div id="vedika-chart-widget">
<h3>Find Your Lucky Gemstone</h3>
<form id="birth-details-form">
<input type="date" name="birthDate" required>
<input type="time" name="birthTime" required>
<input type="text" name="birthPlace" placeholder="Birth City" required>
<button type="submit">Get Recommendations</button>
</form>
<div id="recommendations"></div>
</div>
<script>
document.getElementById('birth-details-form').addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(e.target);
// Geocode birth place (use a geocoding service)
const coords = await geocodePlace(formData.get('birthPlace'));
const response = await fetch('/apps/vedika/gemstone-recommendations', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
birthDate: formData.get('birthDate'),
birthTime: formData.get('birthTime'),
latitude: coords.lat,
longitude: coords.lng
})
});
const data = await response.json();
displayRecommendations(data.recommendations);
});
</script>
Product Metafields
// Tag products with astrological attributes
// In Shopify Admin > Products > Edit > Metafields
// Example metafields for a Ruby gemstone:
{
"vedika": {
"ruling_planet": "Sun",
"zodiac_signs": ["Leo"],
"chakra": "Heart",
"benefits": ["Leadership", "Confidence", "Vitality"],
"day_to_wear": "Sunday",
"finger": "Ring finger",
"metal": "Gold"
}
}
Smart Collections
<!-- sections/zodiac-products.liquid -->
{% assign customer_zodiac = customer.metafields.vedika.zodiac_sign %}
{% if customer_zodiac %}
<h2>Products for {{ customer_zodiac | capitalize }}</h2>
{% assign zodiac_collection = collections[customer_zodiac] %}
{% for product in zodiac_collection.products limit: 8 %}
{% render 'product-card', product: product %}
{% endfor %}
{% else %}
<!-- Show zodiac selector -->
{% render 'vedika-zodiac-selector' %}
{% endif %}
Auspicious Day Widget
<!-- Show auspicious times for purchase -->
<div id="vedika-muhurta">
<h4>Today's Auspicious Times for Purchase</h4>
<div id="muhurta-times">Loading...</div>
</div>
<script>
async function loadMuhurta() {
const response = await fetch('/apps/vedika/choghadiya');
const data = await response.json();
const auspicious = data.filter(slot => slot.type === 'auspicious');
document.getElementById('muhurta-times').innerHTML = auspicious
.map(slot => `
<div class="muhurta-slot ${slot.isActive ? 'active' : ''}">
<span class="time">${slot.start} - ${slot.end}</span>
<span class="name">${slot.name}</span>
</div>
`)
.join('');
}
loadMuhurta();
</script>