update
11
backEnd/.env
@@ -5,10 +5,19 @@ DEBUG=True
|
||||
ALLOWED_HOSTS=localhost,127.0.0.1
|
||||
|
||||
# Email Configuration (Development - uses console backend by default)
|
||||
USE_SMTP_IN_DEV=False
|
||||
USE_SMTP_IN_DEV=True
|
||||
DEFAULT_FROM_EMAIL=support@gnxsoft.com
|
||||
COMPANY_EMAIL=support@gnxsoft.com
|
||||
SUPPORT_EMAIL=support@gnxsoft.com
|
||||
|
||||
# Site URL
|
||||
SITE_URL=http://localhost:3000
|
||||
|
||||
# SMTP Configuration (for production or when USE_SMTP_IN_DEV=True)
|
||||
EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
|
||||
EMAIL_HOST=mail.gnxsoft.com
|
||||
EMAIL_PORT=587
|
||||
EMAIL_USE_TLS=True
|
||||
EMAIL_USE_SSL=False
|
||||
EMAIL_HOST_USER=support@gnxsoft.com
|
||||
EMAIL_HOST_PASSWORD=P4eli240453.
|
||||
|
||||
725
backEnd/blog/management/commands/populate_insights.py
Normal file
@@ -0,0 +1,725 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.db import transaction
|
||||
from django.utils import timezone
|
||||
from datetime import timedelta
|
||||
from blog.models import BlogAuthor, BlogCategory, BlogTag, BlogPost
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Populate database with insights data (technology trends, best practices, industry news)'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'--delete-old',
|
||||
action='store_true',
|
||||
help='Delete all existing insights/blog data before populating',
|
||||
)
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
delete_old = kwargs.get('delete_old', False)
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('Starting to populate insights data...'))
|
||||
|
||||
with transaction.atomic():
|
||||
# Delete old data if requested
|
||||
if delete_old:
|
||||
self.delete_old_data()
|
||||
|
||||
# Create Authors
|
||||
authors = self.create_authors()
|
||||
|
||||
# Create Categories
|
||||
categories = self.create_categories()
|
||||
|
||||
# Create Tags
|
||||
tags = self.create_tags()
|
||||
|
||||
# Create Insights Posts
|
||||
self.create_insights_posts(authors, categories, tags)
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('\n✓ Successfully populated insights data!'))
|
||||
self.stdout.write(f' - Authors: {BlogAuthor.objects.count()}')
|
||||
self.stdout.write(f' - Categories: {BlogCategory.objects.count()}')
|
||||
self.stdout.write(f' - Tags: {BlogTag.objects.count()}')
|
||||
self.stdout.write(f' - Insights Posts: {BlogPost.objects.count()}')
|
||||
|
||||
def delete_old_data(self):
|
||||
"""Delete all existing insights/blog data"""
|
||||
self.stdout.write(self.style.WARNING('Deleting old insights data...'))
|
||||
|
||||
posts_count = BlogPost.objects.count()
|
||||
BlogPost.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {posts_count} insights posts')
|
||||
|
||||
tags_count = BlogTag.objects.count()
|
||||
BlogTag.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {tags_count} tags')
|
||||
|
||||
categories_count = BlogCategory.objects.count()
|
||||
BlogCategory.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {categories_count} categories')
|
||||
|
||||
authors_count = BlogAuthor.objects.count()
|
||||
BlogAuthor.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {authors_count} authors')
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('Old data deleted successfully!'))
|
||||
|
||||
def create_authors(self):
|
||||
"""Create blog authors"""
|
||||
self.stdout.write('Creating authors...')
|
||||
|
||||
authors_data = [
|
||||
{
|
||||
'name': 'Sarah Johnson',
|
||||
'email': 'sarah@gnxsoft.com',
|
||||
'bio': 'Senior Technology Consultant with 15+ years in enterprise solutions and digital transformation'
|
||||
},
|
||||
{
|
||||
'name': 'Michael Chen',
|
||||
'email': 'michael@gnxsoft.com',
|
||||
'bio': 'Cloud Architecture Specialist and DevOps Expert with expertise in scalable infrastructure'
|
||||
},
|
||||
{
|
||||
'name': 'Emily Rodriguez',
|
||||
'email': 'emily@gnxsoft.com',
|
||||
'bio': 'API Integration and System Integration Lead specializing in modern integration patterns'
|
||||
},
|
||||
{
|
||||
'name': 'David Thompson',
|
||||
'email': 'david@gnxsoft.com',
|
||||
'bio': 'Digital Transformation and Business Intelligence Consultant focused on data-driven strategies'
|
||||
},
|
||||
{
|
||||
'name': 'Jennifer Martinez',
|
||||
'email': 'jennifer@gnxsoft.com',
|
||||
'bio': 'AI/ML Solutions Architect with expertise in machine learning and artificial intelligence'
|
||||
},
|
||||
{
|
||||
'name': 'Robert Kim',
|
||||
'email': 'robert@gnxsoft.com',
|
||||
'bio': 'Security and Compliance Expert specializing in enterprise security and regulatory compliance'
|
||||
}
|
||||
]
|
||||
|
||||
authors = {}
|
||||
for author_data in authors_data:
|
||||
author, created = BlogAuthor.objects.get_or_create(
|
||||
email=author_data['email'],
|
||||
defaults=author_data
|
||||
)
|
||||
authors[author.name] = author
|
||||
if created:
|
||||
self.stdout.write(self.style.SUCCESS(f' ✓ Created author: {author.name}'))
|
||||
else:
|
||||
self.stdout.write(f' - Author already exists: {author.name}')
|
||||
|
||||
return authors
|
||||
|
||||
def create_categories(self):
|
||||
"""Create blog categories"""
|
||||
self.stdout.write('Creating categories...')
|
||||
|
||||
categories_data = [
|
||||
{
|
||||
'title': 'Technology Trends',
|
||||
'slug': 'technology-trends',
|
||||
'description': 'Latest trends and innovations in enterprise technology',
|
||||
'display_order': 1
|
||||
},
|
||||
{
|
||||
'title': 'Best Practices',
|
||||
'slug': 'best-practices',
|
||||
'description': 'Industry best practices and proven methodologies',
|
||||
'display_order': 2
|
||||
},
|
||||
{
|
||||
'title': 'Enterprise Software',
|
||||
'slug': 'enterprise-software',
|
||||
'description': 'Insights on enterprise software development and architecture',
|
||||
'display_order': 3
|
||||
},
|
||||
{
|
||||
'title': 'Cloud & Infrastructure',
|
||||
'slug': 'cloud-infrastructure',
|
||||
'description': 'Cloud computing, infrastructure, and DevOps insights',
|
||||
'display_order': 4
|
||||
},
|
||||
{
|
||||
'title': 'AI & Machine Learning',
|
||||
'slug': 'ai-machine-learning',
|
||||
'description': 'Artificial intelligence and machine learning insights',
|
||||
'display_order': 5
|
||||
},
|
||||
{
|
||||
'title': 'Security & Compliance',
|
||||
'slug': 'security-compliance',
|
||||
'description': 'Enterprise security, cybersecurity, and compliance topics',
|
||||
'display_order': 6
|
||||
},
|
||||
{
|
||||
'title': 'Digital Transformation',
|
||||
'slug': 'digital-transformation',
|
||||
'description': 'Digital transformation strategies and insights',
|
||||
'display_order': 7
|
||||
},
|
||||
{
|
||||
'title': 'Industry News',
|
||||
'slug': 'industry-news',
|
||||
'description': 'Latest news and updates from the technology industry',
|
||||
'display_order': 8
|
||||
}
|
||||
]
|
||||
|
||||
categories = {}
|
||||
for cat_data in categories_data:
|
||||
category, created = BlogCategory.objects.get_or_create(
|
||||
slug=cat_data['slug'],
|
||||
defaults=cat_data
|
||||
)
|
||||
categories[category.slug] = category
|
||||
if created:
|
||||
self.stdout.write(self.style.SUCCESS(f' ✓ Created category: {category.title}'))
|
||||
else:
|
||||
self.stdout.write(f' - Category already exists: {category.title}')
|
||||
|
||||
return categories
|
||||
|
||||
def create_tags(self):
|
||||
"""Create blog tags"""
|
||||
self.stdout.write('Creating tags...')
|
||||
|
||||
tags_data = [
|
||||
'Technology Trends', 'Best Practices', 'Enterprise', 'Cloud', 'AWS', 'Azure', 'GCP',
|
||||
'DevOps', 'CI/CD', 'Docker', 'Kubernetes', 'Microservices', 'API', 'REST', 'GraphQL',
|
||||
'Security', 'Compliance', 'GDPR', 'SOC 2', 'Zero Trust', 'AI', 'Machine Learning',
|
||||
'Data Analytics', 'Business Intelligence', 'Digital Transformation', 'Architecture',
|
||||
'Scalability', 'Performance', 'Integration', 'Automation', 'Innovation', 'Industry News'
|
||||
]
|
||||
|
||||
tags = {}
|
||||
for tag_name in tags_data:
|
||||
tag, created = BlogTag.objects.get_or_create(
|
||||
name=tag_name,
|
||||
defaults={'name': tag_name}
|
||||
)
|
||||
tags[tag_name] = tag
|
||||
if created:
|
||||
self.stdout.write(self.style.SUCCESS(f' ✓ Created tag: {tag.name}'))
|
||||
else:
|
||||
self.stdout.write(f' - Tag already exists: {tag.name}')
|
||||
|
||||
return tags
|
||||
|
||||
def create_insights_posts(self, authors, categories, tags):
|
||||
"""Create insights blog posts"""
|
||||
self.stdout.write('Creating insights posts...')
|
||||
|
||||
posts_data = [
|
||||
{
|
||||
'title': 'Top 10 Technology Trends Shaping Enterprise Software in 2024',
|
||||
'content': '''<h2>Introduction</h2>
|
||||
<p>As we navigate through 2024, enterprise software development continues to evolve at a rapid pace. Understanding these trends is crucial for organizations looking to stay competitive and innovative.</p>
|
||||
|
||||
<h3>1. AI-Powered Development Tools</h3>
|
||||
<p>Artificial intelligence is revolutionizing how developers write code. From AI-assisted coding to automated testing, these tools are increasing productivity and reducing time-to-market for enterprise applications.</p>
|
||||
|
||||
<h3>2. Edge Computing Adoption</h3>
|
||||
<p>Edge computing is becoming mainstream as organizations seek to reduce latency and improve performance. This trend is particularly important for IoT applications and real-time data processing.</p>
|
||||
|
||||
<h3>3. Low-Code/No-Code Platforms</h3>
|
||||
<p>Low-code and no-code platforms are democratizing software development, enabling business users to create applications without extensive programming knowledge.</p>
|
||||
|
||||
<h3>4. Quantum Computing Readiness</h3>
|
||||
<p>While still emerging, quantum computing is beginning to impact enterprise software planning. Organizations are preparing for quantum-safe cryptography and exploring quantum algorithms.</p>
|
||||
|
||||
<h3>5. Sustainable Software Development</h3>
|
||||
<p>Green computing and sustainable development practices are gaining traction as organizations focus on reducing their carbon footprint and energy consumption.</p>
|
||||
|
||||
<h3>6. Enhanced Security Posture</h3>
|
||||
<p>Zero-trust architecture and advanced threat detection are becoming standard practices as cyber threats become more sophisticated.</p>
|
||||
|
||||
<h3>7. Serverless Architecture Growth</h3>
|
||||
<p>Serverless computing continues to grow, offering cost-effective and scalable solutions for enterprise applications.</p>
|
||||
|
||||
<h3>8. Real-Time Data Processing</h3>
|
||||
<p>The demand for real-time analytics and data processing is driving adoption of stream processing technologies and event-driven architectures.</p>
|
||||
|
||||
<h3>9. Multi-Cloud Strategies</h3>
|
||||
<p>Organizations are increasingly adopting multi-cloud approaches to avoid vendor lock-in and optimize costs.</p>
|
||||
|
||||
<h3>10. Developer Experience Focus</h3>
|
||||
<p>Improving developer experience through better tools, documentation, and workflows is becoming a priority for enterprise organizations.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>These trends represent significant opportunities for organizations willing to invest in modern technologies and practices. Staying informed and adaptable is key to success in the evolving enterprise software landscape.</p>''',
|
||||
'excerpt': 'Explore the top 10 technology trends that are reshaping enterprise software development and how they impact your organization.',
|
||||
'author': authors.get('Sarah Johnson'),
|
||||
'category': categories.get('technology-trends'),
|
||||
'tags': ['Technology Trends', 'Enterprise', 'Innovation', 'Industry News'],
|
||||
'thumbnail_url': '/images/blog/one.png',
|
||||
'featured': True,
|
||||
'reading_time': 12,
|
||||
'days_ago': 2,
|
||||
'meta_description': 'Discover the top 10 technology trends shaping enterprise software in 2024, from AI-powered tools to quantum computing readiness.',
|
||||
'meta_keywords': 'technology trends, enterprise software, AI, cloud computing, innovation'
|
||||
},
|
||||
{
|
||||
'title': 'Best Practices for Building Scalable Enterprise APIs',
|
||||
'content': '''<h2>Introduction</h2>
|
||||
<p>Building scalable APIs is fundamental to modern enterprise architecture. This guide covers essential best practices that ensure your APIs can handle growth and maintain performance.</p>
|
||||
|
||||
<h3>Design Principles</h3>
|
||||
<p>Start with a clear API design that follows RESTful principles or GraphQL patterns. Consistency in naming, structure, and behavior is crucial for developer adoption and maintainability.</p>
|
||||
|
||||
<h3>Versioning Strategy</h3>
|
||||
<p>Implement API versioning from the start. Use URL versioning (e.g., /api/v1/) or header-based versioning to ensure backward compatibility as your API evolves.</p>
|
||||
|
||||
<h3>Rate Limiting and Throttling</h3>
|
||||
<p>Protect your API from abuse and ensure fair usage by implementing rate limiting. Consider different limits for different user tiers and provide clear error messages when limits are exceeded.</p>
|
||||
|
||||
<h3>Caching Strategies</h3>
|
||||
<p>Implement multi-layer caching to reduce database load and improve response times. Use HTTP caching headers, application-level caching, and CDN caching where appropriate.</p>
|
||||
|
||||
<h3>Error Handling</h3>
|
||||
<p>Provide clear, consistent error responses with appropriate HTTP status codes. Include error codes, messages, and documentation links to help developers resolve issues quickly.</p>
|
||||
|
||||
<h3>Security Best Practices</h3>
|
||||
<ul>
|
||||
<li>Implement OAuth 2.0 or JWT for authentication</li>
|
||||
<li>Use HTTPS for all API communications</li>
|
||||
<li>Validate and sanitize all inputs</li>
|
||||
<li>Implement proper authorization checks</li>
|
||||
<li>Regular security audits and penetration testing</li>
|
||||
</ul>
|
||||
|
||||
<h3>Documentation</h3>
|
||||
<p>Comprehensive API documentation is essential. Use tools like OpenAPI/Swagger to generate interactive documentation that stays in sync with your API implementation.</p>
|
||||
|
||||
<h3>Monitoring and Observability</h3>
|
||||
<p>Implement comprehensive logging, metrics, and tracing to monitor API performance, identify bottlenecks, and troubleshoot issues quickly.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>Following these best practices will help you build APIs that are scalable, secure, and maintainable. Remember that API design is an iterative process that requires continuous improvement based on usage patterns and feedback.</p>''',
|
||||
'excerpt': 'Learn essential best practices for designing and building scalable enterprise APIs that can grow with your business needs.',
|
||||
'author': authors.get('Emily Rodriguez'),
|
||||
'category': categories.get('best-practices'),
|
||||
'tags': ['API', 'Best Practices', 'Architecture', 'Scalability'],
|
||||
'thumbnail_url': '/images/blog/two.png',
|
||||
'featured': True,
|
||||
'reading_time': 10,
|
||||
'days_ago': 5,
|
||||
'meta_description': 'Essential best practices for building scalable enterprise APIs including design, security, and performance optimization.',
|
||||
'meta_keywords': 'API design, REST API, GraphQL, API best practices, enterprise APIs'
|
||||
},
|
||||
{
|
||||
'title': 'The Future of Cloud-Native Architecture',
|
||||
'content': '''<h2>What is Cloud-Native Architecture?</h2>
|
||||
<p>Cloud-native architecture represents a fundamental shift in how applications are designed, built, and deployed. It leverages cloud computing capabilities to create scalable, resilient, and maintainable systems.</p>
|
||||
|
||||
<h3>Key Characteristics</h3>
|
||||
<ul>
|
||||
<li>Container-based deployment with Docker and Kubernetes</li>
|
||||
<li>Microservices architecture for modularity</li>
|
||||
<li>DevOps practices for continuous delivery</li>
|
||||
<li>API-first design for integration</li>
|
||||
<li>Automated scaling and self-healing capabilities</li>
|
||||
</ul>
|
||||
|
||||
<h3>Benefits of Cloud-Native Approach</h3>
|
||||
<p>Organizations adopting cloud-native architecture experience faster time-to-market, improved scalability, better resource utilization, and enhanced resilience. These benefits translate to competitive advantages and cost savings.</p>
|
||||
|
||||
<h3>Container Orchestration</h3>
|
||||
<p>Kubernetes has become the de facto standard for container orchestration. Understanding Kubernetes concepts like pods, services, and deployments is essential for cloud-native development.</p>
|
||||
|
||||
<h3>Service Mesh</h3>
|
||||
<p>Service mesh technologies like Istio and Linkerd provide advanced traffic management, security, and observability for microservices architectures.</p>
|
||||
|
||||
<h3>Serverless Integration</h3>
|
||||
<p>Combining serverless functions with containerized microservices offers flexibility and cost optimization. This hybrid approach is becoming increasingly popular.</p>
|
||||
|
||||
<h3>Observability and Monitoring</h3>
|
||||
<p>Cloud-native applications require comprehensive observability. Implement distributed tracing, metrics collection, and centralized logging to maintain visibility into complex systems.</p>
|
||||
|
||||
<h2>Migration Strategies</h2>
|
||||
<p>Migrating to cloud-native architecture requires careful planning. Start with new applications, then gradually modernize legacy systems. Consider factors like team skills, infrastructure, and business priorities.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>Cloud-native architecture is not just a trend—it's the future of enterprise software. Organizations that embrace these principles will be better positioned to innovate and compete in the digital economy.</p>''',
|
||||
'excerpt': 'Explore how cloud-native architecture is transforming enterprise software development and what it means for your organization.',
|
||||
'author': authors.get('Michael Chen'),
|
||||
'category': categories.get('cloud-infrastructure'),
|
||||
'tags': ['Cloud', 'Kubernetes', 'Docker', 'Microservices', 'DevOps'],
|
||||
'thumbnail_url': '/images/blog/three.png',
|
||||
'featured': True,
|
||||
'reading_time': 11,
|
||||
'days_ago': 8,
|
||||
'meta_description': 'Understanding cloud-native architecture and how it transforms enterprise software development with containers and microservices.',
|
||||
'meta_keywords': 'cloud-native, Kubernetes, Docker, microservices, cloud architecture'
|
||||
},
|
||||
{
|
||||
'title': 'AI and Machine Learning: Transforming Enterprise Applications',
|
||||
'content': '''<h2>The AI Revolution in Enterprise Software</h2>
|
||||
<p>Artificial intelligence and machine learning are no longer futuristic concepts—they're transforming enterprise applications today. From predictive analytics to intelligent automation, AI is creating new possibilities.</p>
|
||||
|
||||
<h3>Use Cases in Enterprise Applications</h3>
|
||||
<ul>
|
||||
<li>Predictive maintenance for infrastructure</li>
|
||||
<li>Intelligent customer service chatbots</li>
|
||||
<li>Fraud detection and prevention</li>
|
||||
<li>Personalized user experiences</li>
|
||||
<li>Automated data analysis and insights</li>
|
||||
<li>Natural language processing for document analysis</li>
|
||||
</ul>
|
||||
|
||||
<h3>Machine Learning Model Deployment</h3>
|
||||
<p>Deploying ML models in production requires careful consideration of infrastructure, monitoring, and model versioning. MLOps practices help bridge the gap between data science and operations.</p>
|
||||
|
||||
<h3>Data Requirements</h3>
|
||||
<p>Quality data is the foundation of successful AI initiatives. Organizations must invest in data collection, cleaning, and management to enable effective machine learning.</p>
|
||||
|
||||
<h3>Ethical Considerations</h3>
|
||||
<p>As AI becomes more prevalent, ethical considerations around bias, privacy, and transparency become critical. Organizations must implement responsible AI practices.</p>
|
||||
|
||||
<h3>Integration Challenges</h3>
|
||||
<p>Integrating AI capabilities into existing enterprise systems requires careful planning. Consider factors like API design, data pipelines, and user experience.</p>
|
||||
|
||||
<h3>ROI and Business Value</h3>
|
||||
<p>Measuring the ROI of AI initiatives can be challenging. Focus on specific business outcomes and establish clear metrics for success before embarking on AI projects.</p>
|
||||
|
||||
<h2>Getting Started</h2>
|
||||
<p>Start with well-defined use cases that have clear business value. Build internal capabilities gradually, and consider partnering with AI specialists for complex implementations.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>AI and machine learning offer tremendous opportunities for enterprise applications. Organizations that strategically adopt these technologies will gain significant competitive advantages.</p>''',
|
||||
'excerpt': 'Discover how AI and machine learning are transforming enterprise applications and learn strategies for successful implementation.',
|
||||
'author': authors.get('Jennifer Martinez'),
|
||||
'category': categories.get('ai-machine-learning'),
|
||||
'tags': ['AI', 'Machine Learning', 'Enterprise', 'Innovation'],
|
||||
'thumbnail_url': '/images/blog/four.png',
|
||||
'featured': False,
|
||||
'reading_time': 9,
|
||||
'days_ago': 12,
|
||||
'meta_description': 'How AI and machine learning are transforming enterprise applications with practical use cases and implementation strategies.',
|
||||
'meta_keywords': 'artificial intelligence, machine learning, AI enterprise, ML models, data science'
|
||||
},
|
||||
{
|
||||
'title': 'Zero Trust Security: A Modern Approach to Enterprise Protection',
|
||||
'content': '''<h2>Understanding Zero Trust Architecture</h2>
|
||||
<p>Zero Trust is a security model based on the principle of "never trust, always verify." Unlike traditional perimeter-based security, Zero Trust assumes that threats can exist both inside and outside the network.</p>
|
||||
|
||||
<h3>Core Principles</h3>
|
||||
<ul>
|
||||
<li>Verify explicitly: Always authenticate and authorize based on all available data points</li>
|
||||
<li>Use least privilege access: Limit user access with Just-In-Time and Just-Enough-Access</li>
|
||||
<li>Assume breach: Minimize blast radius and segment access</li>
|
||||
</ul>
|
||||
|
||||
<h3>Implementation Components</h3>
|
||||
<p>Implementing Zero Trust requires multiple components working together: identity verification, device compliance, network segmentation, application access control, and data protection.</p>
|
||||
|
||||
<h3>Identity and Access Management</h3>
|
||||
<p>Strong identity management is the foundation of Zero Trust. Implement multi-factor authentication, single sign-on, and continuous authentication mechanisms.</p>
|
||||
|
||||
<h3>Network Segmentation</h3>
|
||||
<p>Segment networks to limit lateral movement in case of a breach. Use micro-segmentation to create granular security boundaries.</p>
|
||||
|
||||
<h3>Data Protection</h3>
|
||||
<p>Encrypt data at rest and in transit. Implement data loss prevention (DLP) policies and classify sensitive data appropriately.</p>
|
||||
|
||||
<h3>Monitoring and Analytics</h3>
|
||||
<p>Continuous monitoring and behavioral analytics help detect anomalies and potential threats. Security Information and Event Management (SIEM) systems play a crucial role.</p>
|
||||
|
||||
<h3>Compliance Considerations</h3>
|
||||
<p>Zero Trust architecture helps organizations meet compliance requirements for regulations like GDPR, HIPAA, and SOC 2 by providing comprehensive security controls.</p>
|
||||
|
||||
<h2>Migration Path</h2>
|
||||
<p>Migrating to Zero Trust is a journey, not a destination. Start with high-value assets, implement in phases, and continuously refine your security posture.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>Zero Trust is becoming essential for modern enterprise security. Organizations that adopt this model will be better protected against evolving cyber threats.</p>''',
|
||||
'excerpt': 'Learn about Zero Trust security architecture and how it provides comprehensive protection for modern enterprise environments.',
|
||||
'author': authors.get('Robert Kim'),
|
||||
'category': categories.get('security-compliance'),
|
||||
'tags': ['Security', 'Zero Trust', 'Compliance', 'Enterprise'],
|
||||
'thumbnail_url': '/images/blog/five.png',
|
||||
'featured': False,
|
||||
'reading_time': 10,
|
||||
'days_ago': 15,
|
||||
'meta_description': 'Understanding Zero Trust security architecture and its implementation for comprehensive enterprise protection.',
|
||||
'meta_keywords': 'zero trust, enterprise security, cybersecurity, compliance, access control'
|
||||
},
|
||||
{
|
||||
'title': 'Digital Transformation: Strategies for Success',
|
||||
'content': '''<h2>What is Digital Transformation?</h2>
|
||||
<p>Digital transformation is the integration of digital technology into all areas of a business, fundamentally changing how organizations operate and deliver value to customers.</p>
|
||||
|
||||
<h3>Key Drivers</h3>
|
||||
<ul>
|
||||
<li>Changing customer expectations</li>
|
||||
<li>Competitive pressure</li>
|
||||
<li>Technology advancement</li>
|
||||
<li>Operational efficiency needs</li>
|
||||
<li>Data-driven decision making</li>
|
||||
</ul>
|
||||
|
||||
<h3>Common Challenges</h3>
|
||||
<p>Organizations face numerous challenges in digital transformation: resistance to change, legacy systems, skill gaps, budget constraints, and unclear strategy. Addressing these challenges requires strong leadership and clear vision.</p>
|
||||
|
||||
<h3>Success Factors</h3>
|
||||
<ol>
|
||||
<li>Strong leadership commitment and vision</li>
|
||||
<li>Clear strategy aligned with business goals</li>
|
||||
<li>Customer-centric approach</li>
|
||||
<li>Agile and iterative implementation</li>
|
||||
<li>Investment in people and skills</li>
|
||||
<li>Data-driven decision making</li>
|
||||
<li>Partnership with technology experts</li>
|
||||
</ol>
|
||||
|
||||
<h3>Technology Stack</h3>
|
||||
<p>Modern digital transformation requires a comprehensive technology stack: cloud infrastructure, data analytics platforms, integration tools, security solutions, and modern development frameworks.</p>
|
||||
|
||||
<h3>Cultural Transformation</h3>
|
||||
<p>Technology alone isn't enough. Organizations must foster a culture of innovation, agility, and continuous learning. This cultural shift is often the most challenging aspect of transformation.</p>
|
||||
|
||||
<h3>Measuring Success</h3>
|
||||
<p>Define clear KPIs and metrics to measure transformation success. Focus on business outcomes like customer satisfaction, revenue growth, operational efficiency, and time-to-market.</p>
|
||||
|
||||
<h2>Best Practices</h2>
|
||||
<p>Start with quick wins to build momentum, involve stakeholders early, communicate transparently, and be prepared to adapt your strategy based on learnings and feedback.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>Digital transformation is a continuous journey that requires commitment, strategy, and execution. Organizations that approach it holistically will achieve sustainable competitive advantages.</p>''',
|
||||
'excerpt': 'Discover proven strategies for successful digital transformation and learn how to overcome common challenges.',
|
||||
'author': authors.get('David Thompson'),
|
||||
'category': categories.get('digital-transformation'),
|
||||
'tags': ['Digital Transformation', 'Enterprise', 'Best Practices', 'Innovation'],
|
||||
'thumbnail_url': '/images/blog/six.png',
|
||||
'featured': True,
|
||||
'reading_time': 11,
|
||||
'days_ago': 18,
|
||||
'meta_description': 'Proven strategies for successful digital transformation including best practices and common challenges.',
|
||||
'meta_keywords': 'digital transformation, enterprise strategy, business transformation, innovation'
|
||||
},
|
||||
{
|
||||
'title': 'Microservices Architecture: Design Patterns and Best Practices',
|
||||
'content': '''<h2>Introduction to Microservices</h2>
|
||||
<p>Microservices architecture has become the preferred approach for building large-scale enterprise applications. This architectural style structures applications as collections of loosely coupled services.</p>
|
||||
|
||||
<h3>Key Benefits</h3>
|
||||
<ul>
|
||||
<li>Independent deployment and scaling</li>
|
||||
<li>Technology diversity</li>
|
||||
<li>Fault isolation</li>
|
||||
<li>Team autonomy</li>
|
||||
<li>Easier maintenance and updates</li>
|
||||
</ul>
|
||||
|
||||
<h3>Design Patterns</h3>
|
||||
<ol>
|
||||
<li><strong>API Gateway:</strong> Single entry point for client requests</li>
|
||||
<li><strong>Service Discovery:</strong> Automatic detection of service instances</li>
|
||||
<li><strong>Circuit Breaker:</strong> Prevent cascading failures</li>
|
||||
<li><strong>Event Sourcing:</strong> Store all changes as a sequence of events</li>
|
||||
<li><strong>CQRS:</strong> Separate read and write models</li>
|
||||
<li><strong>Saga Pattern:</strong> Manage distributed transactions</li>
|
||||
</ol>
|
||||
|
||||
<h3>Communication Patterns</h3>
|
||||
<p>Microservices can communicate synchronously via REST or GraphQL APIs, or asynchronously through message queues and event streams. Choose the pattern based on your requirements.</p>
|
||||
|
||||
<h3>Data Management</h3>
|
||||
<p>Each microservice should have its own database. This ensures loose coupling and allows services to evolve independently. Consider eventual consistency for distributed data.</p>
|
||||
|
||||
<h3>Deployment Strategies</h3>
|
||||
<p>Containerization with Docker and orchestration with Kubernetes are standard practices. Implement blue-green or canary deployments for zero-downtime updates.</p>
|
||||
|
||||
<h3>Monitoring and Observability</h3>
|
||||
<p>Distributed systems require comprehensive observability. Implement distributed tracing, centralized logging, and metrics collection to maintain visibility.</p>
|
||||
|
||||
<h3>Common Pitfalls</h3>
|
||||
<p>Avoid creating too many small services, ignoring data consistency requirements, and underestimating operational complexity. Start with a modular monolith if needed.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>Microservices architecture offers significant benefits but requires careful design and operational maturity. Start simple and evolve your architecture based on actual needs.</p>''',
|
||||
'excerpt': 'Learn essential design patterns and best practices for building successful microservices architectures.',
|
||||
'author': authors.get('Michael Chen'),
|
||||
'category': categories.get('enterprise-software'),
|
||||
'tags': ['Microservices', 'Architecture', 'Best Practices', 'Docker', 'Kubernetes'],
|
||||
'thumbnail_url': '/images/blog/seven.png',
|
||||
'featured': False,
|
||||
'reading_time': 13,
|
||||
'days_ago': 22,
|
||||
'meta_description': 'Essential design patterns and best practices for building successful microservices architectures.',
|
||||
'meta_keywords': 'microservices, architecture patterns, distributed systems, service design'
|
||||
},
|
||||
{
|
||||
'title': 'DevOps Best Practices for Enterprise Teams',
|
||||
'content': '''<h2>The DevOps Culture</h2>
|
||||
<p>DevOps is more than tools and processes—it's a cultural shift that brings development and operations teams together to deliver software faster and more reliably.</p>
|
||||
|
||||
<h3>Core Principles</h3>
|
||||
<ul>
|
||||
<li>Collaboration and communication</li>
|
||||
<li>Automation of repetitive tasks</li>
|
||||
<li>Continuous integration and delivery</li>
|
||||
<li>Infrastructure as code</li>
|
||||
<li>Monitoring and feedback loops</li>
|
||||
</ul>
|
||||
|
||||
<h3>CI/CD Pipelines</h3>
|
||||
<p>Implement robust CI/CD pipelines that automate testing, building, and deployment. Use tools like Jenkins, GitLab CI, or GitHub Actions to streamline your workflow.</p>
|
||||
|
||||
<h3>Infrastructure as Code</h3>
|
||||
<p>Manage infrastructure using code with tools like Terraform or CloudFormation. This enables version control, reproducibility, and easier management of complex environments.</p>
|
||||
|
||||
<h3>Automated Testing</h3>
|
||||
<p>Implement comprehensive testing at multiple levels: unit tests, integration tests, and end-to-end tests. Automated testing is crucial for maintaining quality at speed.</p>
|
||||
|
||||
<h3>Monitoring and Observability</h3>
|
||||
<p>Implement comprehensive monitoring with tools like Prometheus, Grafana, and ELK stack. Monitor application performance, infrastructure health, and business metrics.</p>
|
||||
|
||||
<h3>Security Integration</h3>
|
||||
<p>Integrate security into your DevOps pipeline (DevSecOps). Implement automated security scanning, vulnerability assessments, and compliance checks.</p>
|
||||
|
||||
<h3>Team Collaboration</h3>
|
||||
<p>Foster collaboration through shared responsibilities, cross-functional teams, and blameless post-mortems. Communication is key to DevOps success.</p>
|
||||
|
||||
<h3>Continuous Improvement</h3>
|
||||
<p>DevOps is a journey of continuous improvement. Regularly review processes, gather feedback, and iterate on your practices to achieve better outcomes.</p>
|
||||
|
||||
<h2>Getting Started</h2>
|
||||
<p>Start with small, incremental changes. Automate one process at a time, measure results, and expand based on learnings. Focus on cultural change alongside tool adoption.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>DevOps practices enable organizations to deliver software faster, more reliably, and with higher quality. The key is to start small and continuously improve.</p>''',
|
||||
'excerpt': 'Discover essential DevOps best practices that help enterprise teams deliver software faster and more reliably.',
|
||||
'author': authors.get('Michael Chen'),
|
||||
'category': categories.get('cloud-infrastructure'),
|
||||
'tags': ['DevOps', 'CI/CD', 'Best Practices', 'Automation'],
|
||||
'thumbnail_url': '/images/blog/eight.png',
|
||||
'featured': False,
|
||||
'reading_time': 9,
|
||||
'days_ago': 25,
|
||||
'meta_description': 'Essential DevOps best practices for enterprise teams including CI/CD, automation, and monitoring.',
|
||||
'meta_keywords': 'DevOps, CI/CD, automation, infrastructure as code, continuous delivery'
|
||||
},
|
||||
{
|
||||
'title': 'Data Analytics and Business Intelligence: Driving Data-Driven Decisions',
|
||||
'content': '''<h2>The Power of Data-Driven Decision Making</h2>
|
||||
<p>In today's competitive landscape, organizations that leverage data analytics and business intelligence gain significant advantages. Data-driven decisions lead to better outcomes and competitive positioning.</p>
|
||||
|
||||
<h3>Modern BI Platforms</h3>
|
||||
<p>Modern business intelligence platforms offer self-service analytics, real-time dashboards, and AI-powered insights. These tools democratize data access across organizations.</p>
|
||||
|
||||
<h3>Analytics Maturity Model</h3>
|
||||
<ol>
|
||||
<li><strong>Descriptive Analytics:</strong> What happened? Historical data analysis</li>
|
||||
<li><strong>Diagnostic Analytics:</strong> Why did it happen? Root cause analysis</li>
|
||||
<li><strong>Predictive Analytics:</strong> What will happen? Forecasting and modeling</li>
|
||||
<li><strong>Prescriptive Analytics:</strong> What should we do? Actionable recommendations</li>
|
||||
</ol>
|
||||
|
||||
<h3>Data Warehouse Design</h3>
|
||||
<p>A well-designed data warehouse serves as the foundation for business intelligence. Consider dimensional modeling, data quality, and ETL processes in your design.</p>
|
||||
|
||||
<h3>Real-Time Analytics</h3>
|
||||
<p>Real-time analytics enable organizations to respond quickly to changing conditions. Implement stream processing technologies for time-sensitive insights.</p>
|
||||
|
||||
<h3>Data Governance</h3>
|
||||
<p>Effective data governance ensures data quality, security, and compliance. Establish clear policies, roles, and processes for data management.</p>
|
||||
|
||||
<h3>Visualization Best Practices</h3>
|
||||
<p>Effective data visualization communicates insights clearly. Choose appropriate chart types, use consistent design, and focus on key metrics that drive decisions.</p>
|
||||
|
||||
<h3>AI and Machine Learning Integration</h3>
|
||||
<p>Integrating ML models into BI platforms provides deeper insights and predictive capabilities. Use AI to identify patterns and anomalies in large datasets.</p>
|
||||
|
||||
<h2>Implementation Strategy</h2>
|
||||
<p>Start with clear business questions, identify key metrics, and build dashboards that answer those questions. Iterate based on user feedback and evolving needs.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>Data analytics and business intelligence are essential for modern organizations. Investing in these capabilities enables better decision-making and competitive advantages.</p>''',
|
||||
'excerpt': 'Learn how data analytics and business intelligence drive better decision-making in enterprise organizations.',
|
||||
'author': authors.get('David Thompson'),
|
||||
'category': categories.get('best-practices'),
|
||||
'tags': ['Data Analytics', 'Business Intelligence', 'Enterprise', 'Best Practices'],
|
||||
'thumbnail_url': '/images/blog/one.png',
|
||||
'featured': False,
|
||||
'reading_time': 10,
|
||||
'days_ago': 28,
|
||||
'meta_description': 'How data analytics and business intelligence drive data-driven decision making in enterprises.',
|
||||
'meta_keywords': 'data analytics, business intelligence, BI, data-driven decisions, analytics'
|
||||
},
|
||||
{
|
||||
'title': 'Industry News: Latest Developments in Enterprise Technology',
|
||||
'content': '''<h2>Recent Industry Developments</h2>
|
||||
<p>The enterprise technology landscape continues to evolve rapidly. Here are the latest developments that are shaping the industry.</p>
|
||||
|
||||
<h3>Cloud Provider Innovations</h3>
|
||||
<p>Major cloud providers are introducing new services and capabilities. AWS, Azure, and GCP are competing on AI/ML services, serverless computing, and edge computing solutions.</p>
|
||||
|
||||
<h3>AI Regulation and Governance</h3>
|
||||
<p>Governments worldwide are developing regulations for AI use. Organizations must stay informed about compliance requirements and ethical AI practices.</p>
|
||||
|
||||
<h3>Cybersecurity Threats</h3>
|
||||
<p>Cybersecurity threats continue to evolve. Ransomware attacks, supply chain vulnerabilities, and AI-powered attacks are top concerns for enterprise security teams.</p>
|
||||
|
||||
<h3>Open Source Contributions</h3>
|
||||
<p>The open source community continues to drive innovation. New frameworks, tools, and libraries are emerging that simplify enterprise development.</p>
|
||||
|
||||
<h3>Remote Work Technology</h3>
|
||||
<p>Remote and hybrid work models are driving demand for collaboration tools, virtual workspaces, and secure remote access solutions.</p>
|
||||
|
||||
<h3>Sustainability Initiatives</h3>
|
||||
<p>Technology companies are focusing on sustainability. Green computing, carbon-neutral data centers, and energy-efficient software are gaining attention.</p>
|
||||
|
||||
<h3>Industry Consolidation</h3>
|
||||
<p>Mergers and acquisitions continue to reshape the technology landscape. Organizations must stay informed about how these changes affect their technology choices.</p>
|
||||
|
||||
<h2>Staying Informed</h2>
|
||||
<p>Staying current with industry news is essential for technology leaders. Follow industry publications, attend conferences, and engage with professional communities.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
<p>The enterprise technology industry is dynamic and constantly evolving. Organizations that stay informed and adaptable will be best positioned for success.</p>''',
|
||||
'excerpt': 'Stay updated with the latest developments and news in enterprise technology that impact your organization.',
|
||||
'author': authors.get('Sarah Johnson'),
|
||||
'category': categories.get('industry-news'),
|
||||
'tags': ['Industry News', 'Technology Trends', 'Enterprise', 'Innovation'],
|
||||
'thumbnail_url': '/images/blog/two.png',
|
||||
'featured': False,
|
||||
'reading_time': 7,
|
||||
'days_ago': 30,
|
||||
'meta_description': 'Latest developments and news in enterprise technology including cloud, AI, and cybersecurity updates.',
|
||||
'meta_keywords': 'industry news, technology news, enterprise technology, tech updates'
|
||||
}
|
||||
]
|
||||
|
||||
# Create posts
|
||||
for post_data in posts_data:
|
||||
tag_names = post_data.pop('tags', [])
|
||||
days_ago = post_data.pop('days_ago', 0)
|
||||
meta_description = post_data.pop('meta_description', '')
|
||||
meta_keywords = post_data.pop('meta_keywords', '')
|
||||
|
||||
# Set published_at based on days_ago
|
||||
published_at = timezone.now() - timedelta(days=days_ago)
|
||||
|
||||
post = BlogPost.objects.create(
|
||||
**post_data,
|
||||
published_at=published_at,
|
||||
meta_description=meta_description,
|
||||
meta_keywords=meta_keywords
|
||||
)
|
||||
|
||||
# Add tags
|
||||
for tag_name in tag_names:
|
||||
if tag_name in tags:
|
||||
post.tags.add(tags[tag_name])
|
||||
|
||||
if post.featured:
|
||||
self.stdout.write(self.style.SUCCESS(f' ✓ Created featured post: {post.title}'))
|
||||
else:
|
||||
self.stdout.write(f' ✓ Created post: {post.title}')
|
||||
|
||||
@@ -1,11 +1,49 @@
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
from django.core.mail import EmailMultiAlternatives, get_connection
|
||||
from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
import logging
|
||||
import time
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _send_email_with_retry(email_message, max_retries: int = 3, delay: float = 1.0) -> bool:
|
||||
"""
|
||||
Send email with retry logic for production reliability.
|
||||
Uses Django settings from .env file.
|
||||
|
||||
Args:
|
||||
email_message: EmailMultiAlternatives instance
|
||||
max_retries: Maximum number of retry attempts
|
||||
delay: Delay between retries in seconds
|
||||
|
||||
Returns:
|
||||
bool: True if email was sent successfully, False otherwise
|
||||
"""
|
||||
for attempt in range(max_retries + 1):
|
||||
try:
|
||||
# Test connection before sending (uses EMAIL_BACKEND from settings)
|
||||
connection = get_connection()
|
||||
connection.open()
|
||||
connection.close()
|
||||
|
||||
# Send the email (uses EMAIL_BACKEND and credentials from settings)
|
||||
email_message.send()
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"Email send attempt {attempt + 1} failed: {str(e)}")
|
||||
|
||||
if attempt < max_retries:
|
||||
time.sleep(delay * (2 ** attempt)) # Exponential backoff
|
||||
continue
|
||||
else:
|
||||
logger.error(f"Failed to send email after {max_retries + 1} attempts: {str(e)}")
|
||||
return False
|
||||
|
||||
return False
|
||||
|
||||
|
||||
class CareerEmailService:
|
||||
"""Service for handling career-related emails"""
|
||||
|
||||
@@ -24,26 +62,31 @@ class CareerEmailService:
|
||||
'job_title': application.job.title,
|
||||
'job_location': application.job.location,
|
||||
'application_date': application.applied_date,
|
||||
'logo_url': f'{settings.SITE_URL}/images/logo.png',
|
||||
'site_url': settings.SITE_URL,
|
||||
}
|
||||
|
||||
# Render email templates
|
||||
text_content = render_to_string('career/application_confirmation.txt', context)
|
||||
html_content = render_to_string('career/application_confirmation.html', context)
|
||||
|
||||
# Create email
|
||||
# Create email (uses DEFAULT_FROM_EMAIL from settings)
|
||||
email = EmailMultiAlternatives(
|
||||
subject=subject,
|
||||
body=text_content,
|
||||
from_email=from_email,
|
||||
from_email=from_email, # Uses settings.DEFAULT_FROM_EMAIL
|
||||
to=to_email
|
||||
)
|
||||
email.attach_alternative(html_content, "text/html")
|
||||
|
||||
# Send email
|
||||
email.send(fail_silently=False)
|
||||
# Send email with retry logic (uses EMAIL_BACKEND and credentials from settings)
|
||||
success = _send_email_with_retry(email)
|
||||
|
||||
if success:
|
||||
logger.info(f"Confirmation email sent to {application.email}")
|
||||
return True
|
||||
else:
|
||||
logger.error(f"Failed to send confirmation email to {application.email} after retries")
|
||||
return success
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to send confirmation email: {str(e)}", exc_info=True)
|
||||
@@ -78,18 +121,20 @@ class CareerEmailService:
|
||||
'notice_period': application.notice_period,
|
||||
'application_date': application.applied_date,
|
||||
'resume_url': application.resume.url if application.resume else None,
|
||||
'logo_url': f'{settings.SITE_URL}/images/logo.png',
|
||||
'site_url': settings.SITE_URL,
|
||||
}
|
||||
|
||||
# Render email templates
|
||||
text_content = render_to_string('career/application_notification.txt', context)
|
||||
html_content = render_to_string('career/application_notification.html', context)
|
||||
|
||||
# Create email
|
||||
# Create email (uses DEFAULT_FROM_EMAIL and COMPANY_EMAIL from settings)
|
||||
email = EmailMultiAlternatives(
|
||||
subject=subject,
|
||||
body=text_content,
|
||||
from_email=from_email,
|
||||
to=to_email,
|
||||
from_email=from_email, # Uses settings.DEFAULT_FROM_EMAIL
|
||||
to=to_email, # Uses settings.COMPANY_EMAIL
|
||||
reply_to=[application.email]
|
||||
)
|
||||
email.attach_alternative(html_content, "text/html")
|
||||
@@ -98,11 +143,14 @@ class CareerEmailService:
|
||||
if application.resume:
|
||||
email.attach_file(application.resume.path)
|
||||
|
||||
# Send email
|
||||
email.send(fail_silently=False)
|
||||
# Send email with retry logic (uses EMAIL_BACKEND and credentials from settings)
|
||||
success = _send_email_with_retry(email)
|
||||
|
||||
if success:
|
||||
logger.info(f"Admin notification email sent for application from {application.email}")
|
||||
return True
|
||||
else:
|
||||
logger.error(f"Failed to send admin notification email for application from {application.email} after retries")
|
||||
return success
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to send admin notification email: {str(e)}", exc_info=True)
|
||||
|
||||
676
backEnd/career/management/commands/populate_european_jobs.py
Normal file
@@ -0,0 +1,676 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.db import transaction
|
||||
from django.utils import timezone
|
||||
from datetime import timedelta
|
||||
from career.models import JobPosition
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Populate database with European job positions only'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'--delete-old',
|
||||
action='store_true',
|
||||
help='Delete all existing job positions before populating',
|
||||
)
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
delete_old = kwargs.get('delete_old', False)
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('Starting to populate European job positions...'))
|
||||
|
||||
with transaction.atomic():
|
||||
# Delete old data if requested
|
||||
if delete_old:
|
||||
self.delete_old_data()
|
||||
|
||||
# Create European Job Positions
|
||||
self.create_european_jobs()
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('\n✓ Successfully populated European job positions!'))
|
||||
self.stdout.write(f' - Total positions: {JobPosition.objects.count()}')
|
||||
|
||||
def delete_old_data(self):
|
||||
"""Delete all existing job positions"""
|
||||
self.stdout.write(self.style.WARNING('Deleting old job positions...'))
|
||||
|
||||
jobs_count = JobPosition.objects.count()
|
||||
JobPosition.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {jobs_count} job positions')
|
||||
self.stdout.write(self.style.SUCCESS('Old data deleted successfully!'))
|
||||
|
||||
def create_european_jobs(self):
|
||||
"""Create European job positions"""
|
||||
self.stdout.write('Creating European job positions...')
|
||||
|
||||
jobs_data = [
|
||||
{
|
||||
'title': 'Senior Full Stack Developer',
|
||||
'department': 'Engineering',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'hybrid',
|
||||
'location': 'London, UK',
|
||||
'open_positions': 2,
|
||||
'experience_required': '5+ years',
|
||||
'salary_min': 60000,
|
||||
'salary_max': 85000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ Annual bonus + Stock options + Private health insurance',
|
||||
'short_description': 'Build scalable applications with cutting-edge technologies in our London office.',
|
||||
'about_role': 'We are seeking an experienced Full Stack Developer to join our engineering team in London. You will be responsible for developing and maintaining our web applications using modern technologies and best practices. This is an exciting opportunity to work with a talented team on innovative projects.',
|
||||
'requirements': [
|
||||
'5+ years of full-stack development experience',
|
||||
'Strong proficiency in React, Next.js, and TypeScript',
|
||||
'Experience with Python/Django or Node.js',
|
||||
'Solid understanding of RESTful APIs and GraphQL',
|
||||
'Experience with PostgreSQL and Redis',
|
||||
'Familiarity with AWS cloud services',
|
||||
'Right to work in the UK',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Develop and maintain web applications',
|
||||
'Write clean, maintainable, and efficient code',
|
||||
'Participate in code reviews and pair programming',
|
||||
'Collaborate with cross-functional teams',
|
||||
'Optimize applications for performance and scalability',
|
||||
'Mentor junior developers',
|
||||
'Contribute to technical decision-making',
|
||||
],
|
||||
'qualifications': [
|
||||
'Bachelor\'s degree in Computer Science or related field',
|
||||
'Strong problem-solving and analytical skills',
|
||||
'Experience with version control (Git)',
|
||||
'Good understanding of software development lifecycle',
|
||||
'Excellent communication skills in English',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Experience with Docker and Kubernetes',
|
||||
'Knowledge of CI/CD pipelines (GitLab CI, GitHub Actions)',
|
||||
'Contributions to open-source projects',
|
||||
'Experience with microservices architecture',
|
||||
'Knowledge of test-driven development',
|
||||
],
|
||||
'benefits': [
|
||||
'Competitive salary with stock options',
|
||||
'Hybrid work model (3 days office, 2 days remote)',
|
||||
'Latest MacBook Pro or custom PC',
|
||||
'Learning and development budget (€2,000/year)',
|
||||
'Private health insurance (Bupa)',
|
||||
'Gym membership',
|
||||
'25 days annual leave + bank holidays',
|
||||
'Pension contribution matching',
|
||||
],
|
||||
'start_date': 'Within 1 month',
|
||||
'status': 'active',
|
||||
'featured': True,
|
||||
'priority': 10,
|
||||
},
|
||||
{
|
||||
'title': 'Frontend Developer',
|
||||
'department': 'Engineering',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'remote',
|
||||
'location': 'Remote (Europe)',
|
||||
'open_positions': 3,
|
||||
'experience_required': '3+ years',
|
||||
'salary_min': 45000,
|
||||
'salary_max': 65000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ Performance bonus + Remote work allowance',
|
||||
'short_description': 'Create beautiful and performant user interfaces for our web applications.',
|
||||
'about_role': 'We are looking for a talented Frontend Developer to join our distributed team across Europe. You will work on building modern, responsive web applications using React and Next.js. This is a fully remote position, but we have offices in major European cities if you prefer hybrid work.',
|
||||
'requirements': [
|
||||
'3+ years of frontend development experience',
|
||||
'Strong proficiency in React, Next.js, and TypeScript',
|
||||
'Experience with CSS-in-JS or Tailwind CSS',
|
||||
'Understanding of responsive design principles',
|
||||
'Experience with state management (Redux, Zustand)',
|
||||
'Knowledge of modern JavaScript (ES6+)',
|
||||
'Must be based in Europe',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Develop responsive and accessible user interfaces',
|
||||
'Implement design systems and component libraries',
|
||||
'Optimize applications for performance',
|
||||
'Write unit and integration tests',
|
||||
'Collaborate with designers and backend developers',
|
||||
'Participate in code reviews',
|
||||
],
|
||||
'qualifications': [
|
||||
'Portfolio demonstrating strong frontend skills',
|
||||
'Experience with version control (Git)',
|
||||
'Understanding of web accessibility standards (WCAG)',
|
||||
'Good communication skills in English',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Experience with Storybook',
|
||||
'Knowledge of animation libraries (Framer Motion)',
|
||||
'Experience with GraphQL',
|
||||
'Understanding of SEO best practices',
|
||||
'Experience with testing frameworks (Jest, React Testing Library)',
|
||||
],
|
||||
'benefits': [
|
||||
'Fully remote work (within Europe)',
|
||||
'Competitive salary package',
|
||||
'Remote work allowance (€500/month)',
|
||||
'Learning and development budget',
|
||||
'Latest MacBook Pro',
|
||||
'Health insurance contribution',
|
||||
'Flexible working hours',
|
||||
'30 days annual leave',
|
||||
],
|
||||
'start_date': 'ASAP',
|
||||
'status': 'active',
|
||||
'featured': True,
|
||||
'priority': 9,
|
||||
},
|
||||
{
|
||||
'title': 'Backend Developer (Python/Django)',
|
||||
'department': 'Engineering',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'hybrid',
|
||||
'location': 'Berlin, Germany',
|
||||
'open_positions': 2,
|
||||
'experience_required': '4+ years',
|
||||
'salary_min': 55000,
|
||||
'salary_max': 75000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ 13th month salary + Annual bonus',
|
||||
'short_description': 'Build robust backend systems and APIs using Python and Django.',
|
||||
'about_role': 'We are seeking a Backend Developer to join our engineering team in Berlin. You will work on developing scalable backend systems, RESTful APIs, and microservices using Python and Django. This is an excellent opportunity to work with modern technologies in a dynamic startup environment.',
|
||||
'requirements': [
|
||||
'4+ years of backend development experience',
|
||||
'Strong proficiency in Python and Django',
|
||||
'Experience with PostgreSQL and database optimization',
|
||||
'Understanding of RESTful API design',
|
||||
'Experience with Redis for caching',
|
||||
'Knowledge of Docker and containerization',
|
||||
'Right to work in Germany',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Design and develop backend APIs',
|
||||
'Optimize database queries and performance',
|
||||
'Implement authentication and authorization',
|
||||
'Write comprehensive tests',
|
||||
'Participate in architecture decisions',
|
||||
'Collaborate with frontend and DevOps teams',
|
||||
],
|
||||
'qualifications': [
|
||||
'Bachelor\'s degree in Computer Science or related field',
|
||||
'Strong problem-solving skills',
|
||||
'Experience with Git and version control',
|
||||
'Good understanding of software engineering principles',
|
||||
'Good communication skills in English (German is a plus)',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Experience with Celery and async task processing',
|
||||
'Knowledge of GraphQL',
|
||||
'Experience with AWS services',
|
||||
'Understanding of microservices architecture',
|
||||
'Experience with Elasticsearch',
|
||||
],
|
||||
'benefits': [
|
||||
'Competitive salary with 13th month',
|
||||
'Hybrid work model',
|
||||
'Latest development equipment',
|
||||
'Learning budget (€1,500/year)',
|
||||
'Public transport ticket (BVG)',
|
||||
'Health insurance contribution',
|
||||
'30 days annual leave',
|
||||
'German language courses',
|
||||
],
|
||||
'start_date': 'Within 1 month',
|
||||
'status': 'active',
|
||||
'featured': False,
|
||||
'priority': 8,
|
||||
},
|
||||
{
|
||||
'title': 'DevOps Engineer',
|
||||
'department': 'Engineering',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'remote',
|
||||
'location': 'Remote (Europe)',
|
||||
'open_positions': 1,
|
||||
'experience_required': '4+ years',
|
||||
'salary_min': 60000,
|
||||
'salary_max': 80000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ Annual bonus + Equipment budget',
|
||||
'short_description': 'Build and maintain our cloud infrastructure and CI/CD pipelines.',
|
||||
'about_role': 'We are looking for a DevOps Engineer to join our infrastructure team. You will be responsible for managing our cloud infrastructure, implementing CI/CD pipelines, and ensuring high availability of our services. This is a fully remote position open to candidates across Europe.',
|
||||
'requirements': [
|
||||
'4+ years of DevOps or infrastructure experience',
|
||||
'Strong experience with AWS cloud services',
|
||||
'Proficiency with Docker and Kubernetes',
|
||||
'Experience with CI/CD tools (GitLab CI, GitHub Actions)',
|
||||
'Knowledge of Infrastructure as Code (Terraform, CloudFormation)',
|
||||
'Experience with monitoring tools (Prometheus, Grafana)',
|
||||
'Must be based in Europe',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Manage and optimize cloud infrastructure',
|
||||
'Design and implement CI/CD pipelines',
|
||||
'Monitor system performance and availability',
|
||||
'Implement security best practices',
|
||||
'Automate deployment and scaling processes',
|
||||
'Troubleshoot infrastructure issues',
|
||||
],
|
||||
'qualifications': [
|
||||
'Strong Linux/Unix administration skills',
|
||||
'Experience with scripting (Bash, Python)',
|
||||
'Understanding of networking and security',
|
||||
'Good problem-solving abilities',
|
||||
'Excellent communication skills in English',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Experience with GitOps (ArgoCD, Flux)',
|
||||
'Knowledge of service mesh (Istio)',
|
||||
'Experience with multi-cloud environments',
|
||||
'Certifications (AWS, Kubernetes)',
|
||||
'Experience with observability tools (Datadog, New Relic)',
|
||||
],
|
||||
'benefits': [
|
||||
'Fully remote work',
|
||||
'Competitive salary package',
|
||||
'Equipment budget (€3,000)',
|
||||
'Learning and certification budget',
|
||||
'Health insurance contribution',
|
||||
'Flexible working hours',
|
||||
'30 days annual leave',
|
||||
],
|
||||
'start_date': 'ASAP',
|
||||
'status': 'active',
|
||||
'featured': True,
|
||||
'priority': 9,
|
||||
},
|
||||
{
|
||||
'title': 'UI/UX Designer',
|
||||
'department': 'Design',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'hybrid',
|
||||
'location': 'Amsterdam, Netherlands',
|
||||
'open_positions': 1,
|
||||
'experience_required': '3+ years',
|
||||
'salary_min': 45000,
|
||||
'salary_max': 60000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ 8% holiday allowance + Annual bonus',
|
||||
'short_description': 'Create beautiful and intuitive user experiences for our products.',
|
||||
'about_role': 'We are looking for a talented UI/UX Designer to join our design team in Amsterdam. You will work closely with product managers and engineers to design user-friendly interfaces for our web and mobile applications. This role offers the opportunity to shape the user experience of our products.',
|
||||
'requirements': [
|
||||
'3+ years of UI/UX design experience',
|
||||
'Strong portfolio showcasing web and mobile projects',
|
||||
'Proficiency in Figma or Sketch',
|
||||
'Understanding of user-centered design principles',
|
||||
'Experience with user research and usability testing',
|
||||
'Fluent English (Dutch is a plus)',
|
||||
'Right to work in the Netherlands',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Create wireframes, prototypes, and high-fidelity designs',
|
||||
'Conduct user research and usability testing',
|
||||
'Collaborate with developers to implement designs',
|
||||
'Maintain and evolve design systems',
|
||||
'Present design concepts to stakeholders',
|
||||
'Iterate on designs based on user feedback',
|
||||
],
|
||||
'qualifications': [
|
||||
'Portfolio demonstrating strong UI/UX design skills',
|
||||
'Experience with design systems',
|
||||
'Knowledge of HTML/CSS basics',
|
||||
'Understanding of accessibility standards (WCAG)',
|
||||
'Strong communication and presentation skills',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Experience with motion design and animation',
|
||||
'Knowledge of front-end development',
|
||||
'Illustration skills',
|
||||
'Experience with design tokens',
|
||||
'Experience with user analytics tools',
|
||||
],
|
||||
'benefits': [
|
||||
'Hybrid work model',
|
||||
'Competitive salary with 8% holiday allowance',
|
||||
'Latest design tools and software',
|
||||
'Learning and development budget',
|
||||
'Health insurance contribution',
|
||||
'Public transport card',
|
||||
'25 days annual leave',
|
||||
'Pension contribution',
|
||||
],
|
||||
'start_date': 'ASAP',
|
||||
'status': 'active',
|
||||
'featured': False,
|
||||
'priority': 7,
|
||||
},
|
||||
{
|
||||
'title': 'Product Manager',
|
||||
'department': 'Product',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'hybrid',
|
||||
'location': 'Paris, France',
|
||||
'open_positions': 1,
|
||||
'experience_required': '5+ years',
|
||||
'salary_min': 65000,
|
||||
'salary_max': 85000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ Annual bonus + Stock options',
|
||||
'short_description': 'Lead product strategy and development for our flagship products.',
|
||||
'about_role': 'We are looking for an experienced Product Manager to drive the vision and execution of our products from our Paris office. You will work closely with engineering, design, and marketing teams to deliver exceptional products that delight our customers. This role requires strong leadership and strategic thinking.',
|
||||
'requirements': [
|
||||
'5+ years of product management experience',
|
||||
'Proven track record of successful product launches',
|
||||
'Strong understanding of agile methodologies',
|
||||
'Excellent communication and leadership skills',
|
||||
'Data-driven decision-making approach',
|
||||
'Experience with product analytics tools',
|
||||
'Right to work in France',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Define product vision and strategy',
|
||||
'Create and maintain product roadmap',
|
||||
'Gather and prioritize requirements',
|
||||
'Work with engineering team on implementation',
|
||||
'Conduct market research and competitive analysis',
|
||||
'Analyze product metrics and user feedback',
|
||||
'Coordinate with stakeholders across the organization',
|
||||
],
|
||||
'qualifications': [
|
||||
'Bachelor\'s degree (MBA preferred)',
|
||||
'Strong analytical and problem-solving skills',
|
||||
'Experience with product management tools (Jira, Productboard)',
|
||||
'Understanding of UX principles',
|
||||
'Fluent English (French is a plus)',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Technical background',
|
||||
'Experience in SaaS products',
|
||||
'Knowledge of growth strategies',
|
||||
'Experience with A/B testing',
|
||||
'Understanding of API design',
|
||||
],
|
||||
'benefits': [
|
||||
'Competitive salary with equity',
|
||||
'Hybrid work model',
|
||||
'Professional development budget',
|
||||
'Health and wellness benefits',
|
||||
'Public transport pass',
|
||||
'Lunch vouchers',
|
||||
'30 days annual leave + RTT',
|
||||
'Team offsites and events',
|
||||
],
|
||||
'start_date': 'Within 1 month',
|
||||
'status': 'active',
|
||||
'featured': True,
|
||||
'priority': 8,
|
||||
},
|
||||
{
|
||||
'title': 'Data Engineer',
|
||||
'department': 'Data',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'hybrid',
|
||||
'location': 'Barcelona, Spain',
|
||||
'open_positions': 1,
|
||||
'experience_required': '4+ years',
|
||||
'salary_min': 50000,
|
||||
'salary_max': 70000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ Annual bonus + Flexible benefits',
|
||||
'short_description': 'Build and maintain data pipelines and infrastructure.',
|
||||
'about_role': 'We are seeking a Data Engineer to join our data team in Barcelona. You will be responsible for designing, building, and maintaining data pipelines, data warehouses, and ETL processes. This role offers the opportunity to work with large-scale data systems and modern data technologies.',
|
||||
'requirements': [
|
||||
'4+ years of data engineering experience',
|
||||
'Strong proficiency in Python',
|
||||
'Experience with SQL and database design',
|
||||
'Knowledge of data pipeline tools (Airflow, Luigi)',
|
||||
'Experience with cloud data warehouses (Snowflake, BigQuery, Redshift)',
|
||||
'Understanding of ETL/ELT processes',
|
||||
'Right to work in Spain',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Design and build data pipelines',
|
||||
'Maintain data warehouse infrastructure',
|
||||
'Optimize data processing performance',
|
||||
'Ensure data quality and reliability',
|
||||
'Collaborate with data analysts and scientists',
|
||||
'Document data processes and architecture',
|
||||
],
|
||||
'qualifications': [
|
||||
'Bachelor\'s degree in Computer Science or related field',
|
||||
'Strong problem-solving skills',
|
||||
'Experience with version control (Git)',
|
||||
'Understanding of data modeling concepts',
|
||||
'Good communication skills in English (Spanish is a plus)',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Experience with Apache Spark',
|
||||
'Knowledge of real-time data processing (Kafka)',
|
||||
'Experience with dbt',
|
||||
'Understanding of data governance',
|
||||
'Experience with machine learning pipelines',
|
||||
],
|
||||
'benefits': [
|
||||
'Hybrid work model',
|
||||
'Competitive salary package',
|
||||
'Learning and development budget',
|
||||
'Health insurance',
|
||||
'Flexible working hours',
|
||||
'Public transport card',
|
||||
'23 days annual leave + local holidays',
|
||||
'Flexible benefits package',
|
||||
],
|
||||
'start_date': 'ASAP',
|
||||
'status': 'active',
|
||||
'featured': False,
|
||||
'priority': 7,
|
||||
},
|
||||
{
|
||||
'title': 'QA Engineer',
|
||||
'department': 'Engineering',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'remote',
|
||||
'location': 'Remote (Europe)',
|
||||
'open_positions': 2,
|
||||
'experience_required': '3+ years',
|
||||
'salary_min': 40000,
|
||||
'salary_max': 55000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ Performance bonus',
|
||||
'short_description': 'Ensure quality and reliability of our software products.',
|
||||
'about_role': 'We are looking for QA Engineers to join our quality assurance team. You will be responsible for testing our web applications, writing automated tests, and ensuring the quality of our products. This is a fully remote position open to candidates across Europe.',
|
||||
'requirements': [
|
||||
'3+ years of QA/testing experience',
|
||||
'Experience with test automation (Selenium, Cypress, Playwright)',
|
||||
'Knowledge of testing methodologies',
|
||||
'Experience with API testing',
|
||||
'Understanding of CI/CD processes',
|
||||
'Strong attention to detail',
|
||||
'Must be based in Europe',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Design and execute test plans',
|
||||
'Write and maintain automated tests',
|
||||
'Perform manual testing when needed',
|
||||
'Report and track bugs',
|
||||
'Collaborate with development teams',
|
||||
'Participate in release processes',
|
||||
],
|
||||
'qualifications': [
|
||||
'Strong analytical and problem-solving skills',
|
||||
'Experience with version control (Git)',
|
||||
'Understanding of software development lifecycle',
|
||||
'Good communication skills in English',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Experience with performance testing',
|
||||
'Knowledge of security testing',
|
||||
'Experience with mobile app testing',
|
||||
'Programming skills (Python, JavaScript)',
|
||||
'Experience with test management tools',
|
||||
],
|
||||
'benefits': [
|
||||
'Fully remote work',
|
||||
'Competitive salary package',
|
||||
'Learning and development budget',
|
||||
'Health insurance contribution',
|
||||
'Flexible working hours',
|
||||
'30 days annual leave',
|
||||
],
|
||||
'start_date': 'ASAP',
|
||||
'status': 'active',
|
||||
'featured': False,
|
||||
'priority': 6,
|
||||
},
|
||||
{
|
||||
'title': 'Marketing Manager',
|
||||
'department': 'Marketing',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'hybrid',
|
||||
'location': 'Dublin, Ireland',
|
||||
'open_positions': 1,
|
||||
'experience_required': '4+ years',
|
||||
'salary_min': 50000,
|
||||
'salary_max': 70000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ Annual bonus + Health insurance',
|
||||
'short_description': 'Lead our marketing efforts and grow our brand presence in Europe.',
|
||||
'about_role': 'We are looking for a Marketing Manager to join our marketing team in Dublin. You will be responsible for developing and executing marketing strategies to increase brand awareness and drive customer acquisition across European markets. This role offers the opportunity to shape our marketing approach.',
|
||||
'requirements': [
|
||||
'4+ years of marketing experience',
|
||||
'Proven track record of successful marketing campaigns',
|
||||
'Strong understanding of digital marketing channels',
|
||||
'Experience with marketing automation tools',
|
||||
'Excellent analytical and communication skills',
|
||||
'Experience with B2B marketing',
|
||||
'Right to work in Ireland',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Develop and execute marketing strategies',
|
||||
'Manage digital marketing campaigns',
|
||||
'Oversee content marketing initiatives',
|
||||
'Analyze campaign performance and ROI',
|
||||
'Manage marketing budget',
|
||||
'Collaborate with sales and product teams',
|
||||
'Coordinate events and webinars',
|
||||
],
|
||||
'qualifications': [
|
||||
'Bachelor\'s degree in Marketing or related field',
|
||||
'Experience with Google Analytics and marketing tools',
|
||||
'Strong project management skills',
|
||||
'Creative thinking and problem-solving abilities',
|
||||
'Excellent communication skills in English',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Experience with HubSpot or similar platforms',
|
||||
'Knowledge of SEO and content marketing',
|
||||
'Video production skills',
|
||||
'Experience with paid advertising',
|
||||
'Multilingual (French, German, Spanish)',
|
||||
],
|
||||
'benefits': [
|
||||
'Hybrid work model',
|
||||
'Competitive salary package',
|
||||
'Marketing conferences and events budget',
|
||||
'Professional development opportunities',
|
||||
'Health insurance',
|
||||
'Public transport card',
|
||||
'25 days annual leave',
|
||||
'Pension contribution',
|
||||
],
|
||||
'start_date': 'ASAP',
|
||||
'status': 'active',
|
||||
'featured': False,
|
||||
'priority': 6,
|
||||
},
|
||||
{
|
||||
'title': 'Sales Development Representative',
|
||||
'department': 'Sales',
|
||||
'employment_type': 'full-time',
|
||||
'location_type': 'hybrid',
|
||||
'location': 'Warsaw, Poland',
|
||||
'open_positions': 2,
|
||||
'experience_required': '1+ years',
|
||||
'salary_min': 35000,
|
||||
'salary_max': 45000,
|
||||
'salary_currency': 'EUR',
|
||||
'salary_period': 'per year',
|
||||
'salary_additional': '+ Commission + Annual bonus',
|
||||
'short_description': 'Generate leads and build relationships with potential customers.',
|
||||
'about_role': 'We are looking for Sales Development Representatives to join our sales team in Warsaw. You will be responsible for prospecting, qualifying leads, and setting up meetings for our sales team. This is an excellent entry-level opportunity with growth potential.',
|
||||
'requirements': [
|
||||
'1+ years of sales or customer service experience',
|
||||
'Strong communication and interpersonal skills',
|
||||
'Self-motivated and goal-oriented',
|
||||
'Experience with CRM systems (Salesforce, HubSpot)',
|
||||
'Fluent English (Polish is a plus)',
|
||||
'Right to work in Poland',
|
||||
],
|
||||
'responsibilities': [
|
||||
'Prospect and qualify leads',
|
||||
'Conduct outbound outreach (email, phone, LinkedIn)',
|
||||
'Schedule meetings for sales team',
|
||||
'Maintain CRM database',
|
||||
'Follow up with prospects',
|
||||
'Achieve monthly quotas',
|
||||
],
|
||||
'qualifications': [
|
||||
'Strong communication skills',
|
||||
'Ability to work in a fast-paced environment',
|
||||
'Basic understanding of sales processes',
|
||||
'Proficiency with Microsoft Office',
|
||||
],
|
||||
'bonus_points': [
|
||||
'Experience in B2B sales',
|
||||
'Knowledge of the tech industry',
|
||||
'Multilingual skills',
|
||||
'Experience with sales tools',
|
||||
],
|
||||
'benefits': [
|
||||
'Hybrid work model',
|
||||
'Competitive base salary + commission',
|
||||
'Sales training and development',
|
||||
'Health insurance',
|
||||
'Public transport card',
|
||||
'20 days annual leave',
|
||||
'Career growth opportunities',
|
||||
],
|
||||
'start_date': 'ASAP',
|
||||
'status': 'active',
|
||||
'featured': False,
|
||||
'priority': 5,
|
||||
},
|
||||
]
|
||||
|
||||
created_count = 0
|
||||
for job_data in jobs_data:
|
||||
# Generate slug from title
|
||||
slug = job_data['title'].lower().replace(' ', '-').replace('/', '-').replace('(', '').replace(')', '')
|
||||
|
||||
job, created = JobPosition.objects.get_or_create(
|
||||
slug=slug,
|
||||
defaults=job_data
|
||||
)
|
||||
if created:
|
||||
created_count += 1
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS(f' ✓ Created job: {job.title} - {job.location}')
|
||||
)
|
||||
else:
|
||||
self.stdout.write(
|
||||
f' - Job already exists: {job.title} - {job.location}'
|
||||
)
|
||||
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS(f'\n✓ Created {created_count} European job position(s)!')
|
||||
)
|
||||
|
||||
@@ -1,78 +1,276 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Application Received - GNX</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.7;
|
||||
color: #2c3e50;
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
margin: 0;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
.container {
|
||||
max-width: 600px;
|
||||
|
||||
.email-wrapper {
|
||||
max-width: 650px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
background: #ffffff;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.header {
|
||||
background-color: #4A90E2;
|
||||
color: white;
|
||||
padding: 20px;
|
||||
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #4A90E2 0%, #357ABD 50%, #2E6DA4 100%);
|
||||
padding: 50px 40px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.content {
|
||||
background-color: #f9f9f9;
|
||||
|
||||
.email-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
right: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.15) 0%, transparent 70%);
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
color: #ffffff;
|
||||
font-size: 32px;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
letter-spacing: -0.5px;
|
||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 50px 40px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.greeting {
|
||||
font-size: 18px;
|
||||
color: #1e293b;
|
||||
margin-bottom: 30px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.intro-text {
|
||||
font-size: 16px;
|
||||
color: #475569;
|
||||
line-height: 1.8;
|
||||
margin-bottom: 35px;
|
||||
}
|
||||
|
||||
.details-box {
|
||||
background: linear-gradient(135deg, rgba(74, 144, 226, 0.08) 0%, rgba(74, 144, 226, 0.03) 100%);
|
||||
border: 2px solid rgba(74, 144, 226, 0.2);
|
||||
border-left: 5px solid #4A90E2;
|
||||
padding: 30px;
|
||||
margin-top: 20px;
|
||||
margin: 35px 0;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 20px rgba(74, 144, 226, 0.1);
|
||||
}
|
||||
.details {
|
||||
background-color: white;
|
||||
padding: 15px;
|
||||
margin: 20px 0;
|
||||
|
||||
.details-box h3 {
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
color: #0f172a;
|
||||
margin-bottom: 25px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 2px solid rgba(74, 144, 226, 0.2);
|
||||
}
|
||||
|
||||
.details-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.details-list li {
|
||||
padding: 15px 0;
|
||||
border-bottom: 1px solid rgba(74, 144, 226, 0.1);
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.details-list li:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.details-list strong {
|
||||
color: #475569;
|
||||
min-width: 140px;
|
||||
font-size: 14px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.details-list span {
|
||||
color: #1e293b;
|
||||
font-size: 15px;
|
||||
font-weight: 500;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.next-steps {
|
||||
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
|
||||
border-left: 4px solid #4A90E2;
|
||||
padding: 25px;
|
||||
border-radius: 8px;
|
||||
margin-top: 40px;
|
||||
}
|
||||
.footer {
|
||||
|
||||
.next-steps h3 {
|
||||
color: #0f172a;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.next-steps p {
|
||||
color: #475569;
|
||||
font-size: 15px;
|
||||
line-height: 1.8;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.next-steps p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.closing {
|
||||
margin-top: 40px;
|
||||
font-size: 16px;
|
||||
color: #1e293b;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.closing strong {
|
||||
color: #0f172a;
|
||||
}
|
||||
|
||||
.email-footer {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
||||
padding: 40px;
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #ddd;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
.footer-company {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.footer-tagline {
|
||||
font-size: 14px;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.footer-note {
|
||||
font-size: 12px;
|
||||
color: #666;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
margin-top: 25px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
body {
|
||||
padding: 20px 10px;
|
||||
}
|
||||
|
||||
.email-header {
|
||||
padding: 40px 25px;
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 35px 25px;
|
||||
}
|
||||
|
||||
.details-list li {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.details-list strong {
|
||||
min-width: auto;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>Application Received</h1>
|
||||
<div class="email-wrapper">
|
||||
<div class="email-header">
|
||||
<h1>✓ Application Received</h1>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<p>Dear <strong>{{ applicant_name }}</strong>,</p>
|
||||
<div class="email-body">
|
||||
<div class="greeting">Dear <strong>{{ applicant_name }}</strong>,</div>
|
||||
|
||||
<p>Thank you for applying for the <strong>{{ job_title }}</strong> position at GNX!</p>
|
||||
<div class="intro-text">
|
||||
Thank you for applying for the <strong>{{ job_title }}</strong> position at GNX! We have received your application and our team will review it carefully. We appreciate your interest in joining our team.
|
||||
</div>
|
||||
|
||||
<p>We have received your application and our team will review it carefully. We appreciate your interest in joining our team.</p>
|
||||
|
||||
<div class="details">
|
||||
<div class="details-box">
|
||||
<h3>Application Details</h3>
|
||||
<ul>
|
||||
<li><strong>Position:</strong> {{ job_title }}</li>
|
||||
<li><strong>Location:</strong> {{ job_location }}</li>
|
||||
<li><strong>Applied on:</strong> {{ application_date|date:"F d, Y" }}</li>
|
||||
<ul class="details-list">
|
||||
<li>
|
||||
<strong>Position:</strong>
|
||||
<span>{{ job_title }}</span>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Location:</strong>
|
||||
<span>{{ job_location }}</span>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Applied on:</strong>
|
||||
<span>{{ application_date|date:"F d, Y" }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="next-steps">
|
||||
<h3>What happens next?</h3>
|
||||
<p>Our hiring team will review your application and resume. If your qualifications match our requirements, we will contact you within 1-2 weeks to discuss the next steps.</p>
|
||||
|
||||
<p>If you have any questions, please don't hesitate to reach out to us.</p>
|
||||
|
||||
<p>Best regards,<br><strong>The GNX Team</strong></p>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated message. Please do not reply to this email.</p>
|
||||
<div class="closing">
|
||||
Best regards,<br>
|
||||
<strong>The GNX Team</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="email-footer">
|
||||
<div class="footer-company">GNX Software Solutions</div>
|
||||
<div class="footer-tagline">Talent Acquisition Team</div>
|
||||
|
||||
<div class="footer-note">
|
||||
This is an automated message. Please do not reply to this email.<br>
|
||||
For inquiries, please contact our HR department.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -1,87 +1,274 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>New Job Application - GNX</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.container {
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.7;
|
||||
color: #2c3e50;
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
margin: 0;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
|
||||
.email-wrapper {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
background: #ffffff;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.header {
|
||||
background-color: #2C3E50;
|
||||
color: white;
|
||||
padding: 20px;
|
||||
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #2C3E50 0%, #34495e 50%, #1a252f 100%);
|
||||
padding: 50px 40px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.content {
|
||||
background-color: #f9f9f9;
|
||||
padding: 30px;
|
||||
margin-top: 20px;
|
||||
|
||||
.email-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
right: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, transparent 70%);
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
color: #ffffff;
|
||||
font-size: 32px;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
letter-spacing: -0.5px;
|
||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.email-header .job-title {
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
font-size: 18px;
|
||||
margin-top: 12px;
|
||||
font-weight: 400;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 50px 40px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.section {
|
||||
background-color: white;
|
||||
padding: 20px;
|
||||
margin: 15px 0;
|
||||
background: #ffffff;
|
||||
border: 1px solid #e9ecef;
|
||||
border-left: 4px solid #3498db;
|
||||
padding: 28px;
|
||||
margin: 25px 0;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.section h3 {
|
||||
margin-top: 0;
|
||||
color: #2C3E50;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
margin-bottom: 20px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 2px solid #e9ecef;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
margin: 10px 0;
|
||||
margin: 15px 0;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
}
|
||||
.label {
|
||||
font-weight: bold;
|
||||
|
||||
.info-label {
|
||||
font-weight: 700;
|
||||
color: #555;
|
||||
min-width: 180px;
|
||||
font-size: 14px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
.cover-letter {
|
||||
background-color: #f0f0f0;
|
||||
padding: 15px;
|
||||
border-radius: 5px;
|
||||
white-space: pre-wrap;
|
||||
margin-top: 10px;
|
||||
|
||||
.info-value {
|
||||
color: #2c3e50;
|
||||
font-size: 15px;
|
||||
flex: 1;
|
||||
font-weight: 500;
|
||||
}
|
||||
.links a {
|
||||
display: inline-block;
|
||||
margin: 5px 10px 5px 0;
|
||||
|
||||
.info-value a {
|
||||
color: #3498db;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
.footer {
|
||||
text-align: center;
|
||||
|
||||
.info-value a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.cover-letter {
|
||||
background: linear-gradient(135deg, #f0f0f0 0%, #f8f8f8 100%);
|
||||
padding: 25px;
|
||||
border-radius: 8px;
|
||||
white-space: pre-wrap;
|
||||
margin-top: 15px;
|
||||
line-height: 1.8;
|
||||
color: #334155;
|
||||
border-left: 4px solid #daa520;
|
||||
}
|
||||
|
||||
.links {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.links a {
|
||||
display: inline-block;
|
||||
padding: 10px 20px;
|
||||
background: linear-gradient(135deg, #3498db, #2980b9);
|
||||
color: #ffffff !important;
|
||||
text-decoration: none;
|
||||
border-radius: 6px;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
box-shadow: 0 4px 15px rgba(52, 152, 219, 0.3);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.links a:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 6px 20px rgba(52, 152, 219, 0.4);
|
||||
}
|
||||
|
||||
.resume-notice {
|
||||
background: linear-gradient(135deg, #fff3cd 0%, #ffeaa7 100%);
|
||||
border-left: 4px solid #f59e0b;
|
||||
padding: 20px 25px;
|
||||
border-radius: 8px;
|
||||
margin-top: 30px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #ddd;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.resume-notice strong {
|
||||
color: #92400e;
|
||||
font-size: 16px;
|
||||
display: block;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.resume-notice p {
|
||||
color: #78350f;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.email-footer {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
||||
padding: 40px;
|
||||
text-align: center;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
.footer-company {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.footer-tagline {
|
||||
font-size: 14px;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.footer-note {
|
||||
font-size: 12px;
|
||||
color: #666;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
margin-top: 25px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
body {
|
||||
padding: 20px 10px;
|
||||
}
|
||||
|
||||
.email-header {
|
||||
padding: 40px 25px;
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 35px 25px;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
min-width: auto;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.links {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.links a {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<div class="email-wrapper">
|
||||
<div class="email-header">
|
||||
<h1>🎯 New Job Application</h1>
|
||||
<p>{{ job_title }}</p>
|
||||
<div class="job-title">{{ job_title }}</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="email-body">
|
||||
<div class="section">
|
||||
<h3>👤 Applicant Information</h3>
|
||||
<div class="info-row">
|
||||
<span class="label">Name:</span> {{ applicant_name }}
|
||||
<span class="info-label">Name:</span>
|
||||
<span class="info-value">{{ applicant_name }}</span>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<span class="label">Email:</span> <a href="mailto:{{ applicant_email }}">{{ applicant_email }}</a>
|
||||
<span class="info-label">Email:</span>
|
||||
<span class="info-value"><a href="mailto:{{ applicant_email }}">{{ applicant_email }}</a></span>
|
||||
</div>
|
||||
{% if applicant_phone %}
|
||||
<div class="info-row">
|
||||
<span class="label">Phone:</span> {{ applicant_phone }}
|
||||
<span class="info-label">Phone:</span>
|
||||
<span class="info-value">{{ applicant_phone }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -90,17 +277,20 @@
|
||||
<h3>💼 Professional Information</h3>
|
||||
{% if current_position %}
|
||||
<div class="info-row">
|
||||
<span class="label">Current Position:</span> {{ current_position }}
|
||||
<span class="info-label">Current Position:</span>
|
||||
<span class="info-value">{{ current_position }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if current_company %}
|
||||
<div class="info-row">
|
||||
<span class="label">Current Company:</span> {{ current_company }}
|
||||
<span class="info-label">Current Company:</span>
|
||||
<span class="info-value">{{ current_company }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if years_of_experience %}
|
||||
<div class="info-row">
|
||||
<span class="label">Years of Experience:</span> {{ years_of_experience }}
|
||||
<span class="info-label">Years of Experience:</span>
|
||||
<span class="info-value">{{ years_of_experience }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -108,24 +298,29 @@
|
||||
<div class="section">
|
||||
<h3>📋 Application Details</h3>
|
||||
<div class="info-row">
|
||||
<span class="label">Position Applied:</span> {{ job_title }}
|
||||
<span class="info-label">Position Applied:</span>
|
||||
<span class="info-value">{{ job_title }}</span>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<span class="label">Application Date:</span> {{ application_date|date:"F d, Y at h:i A" }}
|
||||
<span class="info-label">Application Date:</span>
|
||||
<span class="info-value">{{ application_date|date:"F d, Y at h:i A" }}</span>
|
||||
</div>
|
||||
{% if expected_salary %}
|
||||
<div class="info-row">
|
||||
<span class="label">Expected Salary:</span> {{ expected_salary }} {{ salary_currency }}
|
||||
<span class="info-label">Expected Salary:</span>
|
||||
<span class="info-value">{{ expected_salary }} {{ salary_currency }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if available_from %}
|
||||
<div class="info-row">
|
||||
<span class="label">Available From:</span> {{ available_from|date:"F d, Y" }}
|
||||
<span class="info-label">Available From:</span>
|
||||
<span class="info-value">{{ available_from|date:"F d, Y" }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if notice_period %}
|
||||
<div class="info-row">
|
||||
<span class="label">Notice Period:</span> {{ notice_period }}
|
||||
<span class="info-label">Notice Period:</span>
|
||||
<span class="info-value">{{ notice_period }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -148,13 +343,22 @@
|
||||
<div class="cover-letter">{{ cover_letter }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="resume-notice">
|
||||
<strong>📎 Resume is attached to this email.</strong>
|
||||
<p>Please log in to the admin panel to review the full application and update its status.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p><strong>Resume is attached to this email.</strong></p>
|
||||
<p>Please log in to the admin panel to review the full application and update its status.</p>
|
||||
<div class="email-footer">
|
||||
<div class="footer-company">GNX Software Solutions</div>
|
||||
<div class="footer-tagline">Human Resources Department</div>
|
||||
|
||||
<div class="footer-note">
|
||||
This is an automated notification for new job applications.<br>
|
||||
Please review the application in the admin panel.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -1,58 +1,57 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from case_studies.models import CaseStudyCategory, Client, CaseStudy, CaseStudyImage, CaseStudyProcess
|
||||
from case_studies.models import CaseStudyCategory, Client, CaseStudy, CaseStudyProcess
|
||||
from django.utils import timezone
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Populate database with sample case study data'
|
||||
help = 'Populate database with sample enterprise case study data with Unsplash images'
|
||||
|
||||
def handle(self, *args, **options):
|
||||
self.stdout.write(self.style.SUCCESS('Starting to populate case study data...'))
|
||||
self.stdout.write(self.style.SUCCESS('Starting to populate enterprise case study data...'))
|
||||
|
||||
# Clear existing data
|
||||
CaseStudyProcess.objects.all().delete()
|
||||
CaseStudyImage.objects.all().delete()
|
||||
CaseStudy.objects.all().delete()
|
||||
Client.objects.all().delete()
|
||||
CaseStudyCategory.objects.all().delete()
|
||||
|
||||
# Create Categories
|
||||
# Create Enterprise Categories
|
||||
categories_data = [
|
||||
{
|
||||
'name': '3D Render',
|
||||
'slug': '3d-render',
|
||||
'description': '3D rendering and visualization projects',
|
||||
'name': 'Enterprise Software',
|
||||
'slug': 'enterprise-software',
|
||||
'description': 'Large-scale enterprise software solutions and digital transformation projects',
|
||||
'display_order': 1
|
||||
},
|
||||
{
|
||||
'name': 'UI / UX',
|
||||
'slug': 'ui-ux',
|
||||
'description': 'User interface and user experience design projects',
|
||||
'name': 'Cloud Migration',
|
||||
'slug': 'cloud-migration',
|
||||
'description': 'Cloud infrastructure migration and modernization projects',
|
||||
'display_order': 2
|
||||
},
|
||||
{
|
||||
'name': 'Photography',
|
||||
'slug': 'photography',
|
||||
'description': 'Professional photography projects',
|
||||
'name': 'AI & Machine Learning',
|
||||
'slug': 'ai-machine-learning',
|
||||
'description': 'Artificial intelligence and machine learning implementations',
|
||||
'display_order': 3
|
||||
},
|
||||
{
|
||||
'name': 'AI',
|
||||
'slug': 'ai',
|
||||
'description': 'Artificial intelligence and machine learning projects',
|
||||
'name': 'System Integration',
|
||||
'slug': 'system-integration',
|
||||
'description': 'Enterprise system integration and API development projects',
|
||||
'display_order': 4
|
||||
},
|
||||
{
|
||||
'name': 'Icon Set',
|
||||
'slug': 'icon-set',
|
||||
'description': 'Custom icon set design projects',
|
||||
'name': 'Data Analytics',
|
||||
'slug': 'data-analytics',
|
||||
'description': 'Business intelligence and data analytics solutions',
|
||||
'display_order': 5
|
||||
},
|
||||
{
|
||||
'name': 'Road Map',
|
||||
'slug': 'road-map',
|
||||
'description': 'Product roadmap and planning projects',
|
||||
'name': 'Digital Transformation',
|
||||
'slug': 'digital-transformation',
|
||||
'description': 'End-to-end digital transformation initiatives',
|
||||
'display_order': 6
|
||||
}
|
||||
]
|
||||
@@ -63,31 +62,14 @@ class Command(BaseCommand):
|
||||
categories[category.slug] = category
|
||||
self.stdout.write(f'Created category: {category.name}')
|
||||
|
||||
# Create Clients
|
||||
# Create Enterprise Clients
|
||||
clients_data = [
|
||||
{
|
||||
'name': 'Tarapio',
|
||||
'slug': 'tarapio',
|
||||
'description': 'Leading technology solutions provider',
|
||||
'website': 'https://tarapio.com'
|
||||
},
|
||||
{
|
||||
'name': 'Melenpo',
|
||||
'slug': 'melenpo',
|
||||
'description': 'Digital innovation company',
|
||||
'website': 'https://melenpo.com'
|
||||
},
|
||||
{
|
||||
'name': 'Polax',
|
||||
'slug': 'polax',
|
||||
'description': 'Enterprise software solutions',
|
||||
'website': 'https://polax.com'
|
||||
},
|
||||
{
|
||||
'name': 'AINA',
|
||||
'slug': 'aina',
|
||||
'description': 'AI and automation solutions',
|
||||
'website': 'https://aina.com'
|
||||
'name': 'Undisclosed Client',
|
||||
'slug': 'undisclosed-client',
|
||||
'description': 'Confidential enterprise client',
|
||||
'website': '',
|
||||
'logo_url': 'https://images.unsplash.com/photo-1560179707-f14e90ef3623?w=200&h=200&fit=crop'
|
||||
}
|
||||
]
|
||||
|
||||
@@ -97,205 +79,497 @@ class Command(BaseCommand):
|
||||
clients[client.slug] = client
|
||||
self.stdout.write(f'Created client: {client.name}')
|
||||
|
||||
# Create Case Studies
|
||||
# Create Enterprise Case Studies with Unsplash Images
|
||||
case_studies_data = [
|
||||
{
|
||||
'title': '3D computer graphics, or "3D graphics',
|
||||
'subtitle': 'Immersive 3D Visualization Experience',
|
||||
'title': 'Enterprise Telemedicine Application Platform',
|
||||
'slug': 'enterprise-telemedicine-application-platform',
|
||||
'subtitle': 'Secure Healthcare Delivery with Java and React',
|
||||
'excerpt': 'GNX Soft developed a comprehensive telemedicine platform enabling healthcare providers to deliver remote consultations, manage patient records, and facilitate virtual care delivery. Built with Java backend and React frontend, the platform serves thousands of healthcare professionals and patients nationwide.',
|
||||
'description': '''
|
||||
<h2>Project Overview</h2>
|
||||
<p>A comprehensive 3D rendering project that showcases cutting-edge visualization techniques and photorealistic rendering capabilities. This project demonstrates our expertise in creating stunning visual content for modern digital platforms.</p>
|
||||
<h2>Executive Summary</h2>
|
||||
<p>GNX Soft developed a comprehensive telemedicine platform enabling healthcare providers to deliver remote consultations, manage patient records, and facilitate virtual care delivery. Built with Java backend and React frontend, the platform serves thousands of healthcare professionals and patients nationwide, ensuring HIPAA compliance and secure healthcare data management.</p>
|
||||
|
||||
<h3>The Challenge</h3>
|
||||
<p>Our client needed high-quality 3D visualizations that could accurately represent their products in a digital environment. The challenge was to create renders that were not only photorealistic but also optimized for various platforms and use cases.</p>
|
||||
<p>The client needed a scalable telemedicine solution that could handle high volumes of video consultations, integrate with existing Electronic Health Records (EHR) systems, and maintain strict HIPAA compliance. The platform required real-time video capabilities, secure messaging, prescription management, and comprehensive patient record management.</p>
|
||||
|
||||
<h3>Our Approach</h3>
|
||||
<p>We employed advanced 3D modeling techniques combined with physically-based rendering (PBR) to achieve exceptional results. Our team utilized industry-standard tools and custom workflows to deliver renders that exceeded client expectations.</p>
|
||||
|
||||
<h3>Key Features</h3>
|
||||
<h3>Our Solution</h3>
|
||||
<p>We architected a robust telemedicine platform with the following key features:</p>
|
||||
<ul>
|
||||
<li>Photorealistic lighting and materials</li>
|
||||
<li>High-resolution textures and details</li>
|
||||
<li>Multiple viewing angles and perspectives</li>
|
||||
<li>Optimized assets for web and print</li>
|
||||
<li>Interactive 3D viewer integration</li>
|
||||
<li>Real-time video consultation with HD quality and low latency</li>
|
||||
<li>Secure patient portal with appointment scheduling and medical history access</li>
|
||||
<li>HIPAA-compliant messaging and file sharing</li>
|
||||
<li>Electronic prescription management and pharmacy integration</li>
|
||||
<li>Integration with major EHR systems (Epic, Cerner, Allscripts)</li>
|
||||
<li>Mobile-responsive design for patients and providers</li>
|
||||
<li>Advanced analytics and reporting dashboard</li>
|
||||
<li>Multi-tenant architecture supporting multiple healthcare organizations</li>
|
||||
</ul>
|
||||
|
||||
<h2>Results</h2>
|
||||
<p>The project resulted in a collection of stunning 3D renders that significantly enhanced the client's digital presence. The visualizations led to increased customer engagement and improved conversion rates across their digital channels.</p>
|
||||
<h3>Key Results</h3>
|
||||
<ul>
|
||||
<li>99.9% platform uptime ensuring reliable healthcare delivery</li>
|
||||
<li>Support for 50,000+ monthly consultations</li>
|
||||
<li>HIPAA and HITECH compliance certification</li>
|
||||
<li>60% reduction in no-show rates through automated reminders</li>
|
||||
<li>Average consultation setup time under 30 seconds</li>
|
||||
<li>95% patient satisfaction score</li>
|
||||
<li>Seamless integration with 15+ EHR systems</li>
|
||||
</ul>
|
||||
|
||||
<h2>Technology Stack</h2>
|
||||
<p>Java (Spring Boot), React, WebRTC, PostgreSQL, Redis, RabbitMQ, Docker, Kubernetes, AWS, HIPAA-compliant infrastructure</p>
|
||||
''',
|
||||
'category': categories['3d-render'],
|
||||
'client': None,
|
||||
'thumbnail_url': '/images/case/two.png',
|
||||
'poster_image_url': '/images/case/poster.png',
|
||||
'project_image_url': '/images/case/project.png',
|
||||
'project_overview': 'Lorem ipsum dolor sit amet consectetur. Vestibulum malesuada amet sagittis urna. Mattis eget ultricies est morbi velit ultrices viverra elit facilisi.',
|
||||
'site_map_content': 'Lorem ipsum dolor sit amet consectetur. Vestibulum malesuada amet sagittis urna. Mattis eget ultricies est morbi velit ultrices viverra elit facilisi.',
|
||||
'category': categories['enterprise-software'],
|
||||
'client': clients['undisclosed-client'],
|
||||
'thumbnail_url': 'https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=800&h=600&fit=crop',
|
||||
'featured_image_url': 'https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=1920&h=1080&fit=crop',
|
||||
'poster_image_url': 'https://images.unsplash.com/photo-1559757148-5c350d0d3c56?w=1920&h=1080&fit=crop',
|
||||
'project_image_url': 'https://images.unsplash.com/photo-1559757148-5c350d0d3c56?w=1200&h=800&fit=crop',
|
||||
'project_overview': '''
|
||||
<p>GNX Soft developed a comprehensive telemedicine platform that revolutionizes remote healthcare delivery. Built with Java Spring Boot backend and React frontend, the solution enables healthcare providers to conduct secure video consultations, manage patient records, and deliver virtual care services while maintaining strict HIPAA compliance.</p>
|
||||
<p>The platform features real-time video capabilities, secure messaging, prescription management, and seamless integration with major EHR systems. With support for thousands of concurrent consultations and multi-tenant architecture, the solution serves multiple healthcare organizations while ensuring data security and regulatory compliance.</p>
|
||||
''',
|
||||
'site_map_content': '''
|
||||
<h3>Platform Architecture</h3>
|
||||
<p>The telemedicine platform follows a modern microservices architecture:</p>
|
||||
<ul>
|
||||
<li><strong>Frontend Layer:</strong> React-based responsive web application with real-time video capabilities</li>
|
||||
<li><strong>API Gateway:</strong> Java Spring Boot RESTful APIs with authentication and authorization</li>
|
||||
<li><strong>Video Service:</strong> WebRTC-based real-time video consultation engine</li>
|
||||
<li><strong>Patient Management:</strong> Comprehensive patient record and appointment management system</li>
|
||||
<li><strong>EHR Integration:</strong> Secure integration layer for connecting with external EHR systems</li>
|
||||
<li><strong>Messaging Service:</strong> HIPAA-compliant secure messaging and file sharing</li>
|
||||
<li><strong>Prescription Management:</strong> Electronic prescription generation and pharmacy integration</li>
|
||||
<li><strong>Analytics Dashboard:</strong> Real-time analytics and reporting for healthcare administrators</li>
|
||||
</ul>
|
||||
''',
|
||||
'meta_description': 'Enterprise telemedicine platform case study: Java and React solution for secure remote healthcare delivery.',
|
||||
'meta_keywords': 'telemedicine, healthcare software, Java, React, HIPAA, remote consultations, EHR integration',
|
||||
'featured': True,
|
||||
'published': True,
|
||||
'display_order': 1,
|
||||
'days_ago': 10
|
||||
'days_ago': 5
|
||||
},
|
||||
{
|
||||
'title': 'Artificial intelligence is the simulation of human processes',
|
||||
'subtitle': 'AI-Powered Business Solutions',
|
||||
'title': 'Enterprise Hotel Booking Platform',
|
||||
'slug': 'enterprise-hotel-booking-platform',
|
||||
'subtitle': 'Scalable Hospitality Management with FastAPI and Angular',
|
||||
'excerpt': 'GNX Soft developed a comprehensive hotel booking and management platform that enables hotels to manage reservations, inventory, pricing, and guest services. Built with FastAPI backend and Angular frontend, the platform processes millions of bookings annually across thousands of properties worldwide.',
|
||||
'description': '''
|
||||
<h2>About the Project</h2>
|
||||
<p>This artificial intelligence project demonstrates the power of machine learning and AI in solving complex business problems. We developed custom AI models that automate decision-making processes and provide predictive insights.</p>
|
||||
<h2>Executive Summary</h2>
|
||||
<p>GNX Soft developed a comprehensive hotel booking and management platform that enables hotels to manage reservations, inventory, pricing, and guest services. Built with FastAPI backend and Angular frontend, the platform processes millions of bookings annually across thousands of properties worldwide, providing real-time availability, dynamic pricing, and seamless payment processing.</p>
|
||||
|
||||
<h3>Technology Stack</h3>
|
||||
<p>The project utilizes state-of-the-art AI technologies including neural networks, natural language processing, and computer vision. Our solution is built on a scalable cloud infrastructure that can handle large volumes of data processing.</p>
|
||||
<h3>The Challenge</h3>
|
||||
<p>The client required a high-performance booking platform capable of handling peak traffic during seasonal periods, managing complex inventory across multiple properties, implementing dynamic pricing strategies, and integrating with various payment gateways and third-party booking channels. The solution needed to support real-time availability updates, prevent overbooking, and provide comprehensive reporting and analytics.</p>
|
||||
|
||||
<h3>Implementation</h3>
|
||||
<p>We worked closely with the client to understand their specific needs and challenges. The implementation phase involved data collection, model training, validation, and deployment to production environments.</p>
|
||||
|
||||
<h2>Impact</h2>
|
||||
<p>The AI solution has transformed the client's operations, reducing manual work by 60% and improving accuracy in decision-making processes. The system continues to learn and improve over time, providing increasing value to the organization.</p>
|
||||
''',
|
||||
'category': categories['ai'],
|
||||
'client': clients['tarapio'],
|
||||
'thumbnail_url': '/images/case/one.png',
|
||||
'poster_image_url': '/images/case/poster.png',
|
||||
'featured': True,
|
||||
'display_order': 2,
|
||||
'days_ago': 15
|
||||
},
|
||||
{
|
||||
'title': 'User experience (UX) design is the process design teams',
|
||||
'subtitle': 'Modern UX Design System',
|
||||
'description': '''
|
||||
<h2>Project Summary</h2>
|
||||
<p>A comprehensive UX design project focused on creating intuitive and engaging user experiences. This case study showcases our approach to user-centered design and our ability to create interfaces that delight users.</p>
|
||||
|
||||
<h3>Research and Discovery</h3>
|
||||
<p>We conducted extensive user research including interviews, surveys, and usability testing to understand user needs and pain points. This research formed the foundation of our design decisions.</p>
|
||||
|
||||
<h3>Design Process</h3>
|
||||
<p>Our design process involved creating user personas, journey maps, wireframes, and high-fidelity prototypes. Each step was validated with real users to ensure we were on the right track.</p>
|
||||
|
||||
<h2>Deliverables</h2>
|
||||
<h3>Our Solution</h3>
|
||||
<p>We built a scalable hotel booking platform with the following capabilities:</p>
|
||||
<ul>
|
||||
<li>Comprehensive design system</li>
|
||||
<li>Interactive prototypes</li>
|
||||
<li>User flow diagrams</li>
|
||||
<li>Accessibility guidelines</li>
|
||||
<li>Component library</li>
|
||||
<li>Real-time room availability and inventory management</li>
|
||||
<li>Dynamic pricing engine with rule-based and AI-driven pricing strategies</li>
|
||||
<li>Multi-property management with centralized administration</li>
|
||||
<li>Channel manager integration (Booking.com, Expedia, Airbnb)</li>
|
||||
<li>Secure payment processing with multiple gateway support</li>
|
||||
<li>Guest management system with loyalty program integration</li>
|
||||
<li>Advanced search and filtering with geolocation support</li>
|
||||
<li>Mobile-responsive booking interface and admin dashboard</li>
|
||||
<li>Comprehensive reporting and revenue analytics</li>
|
||||
<li>API-first architecture for third-party integrations</li>
|
||||
</ul>
|
||||
|
||||
<h3>Key Results</h3>
|
||||
<ul>
|
||||
<li>99.95% platform uptime during peak booking seasons</li>
|
||||
<li>Support for 5,000+ concurrent bookings per minute</li>
|
||||
<li>30% increase in direct bookings through improved user experience</li>
|
||||
<li>25% revenue growth through dynamic pricing optimization</li>
|
||||
<li>Real-time synchronization across all booking channels</li>
|
||||
<li>Zero overbooking incidents through intelligent inventory management</li>
|
||||
<li>Average booking completion time under 2 minutes</li>
|
||||
<li>Integration with 20+ third-party booking channels</li>
|
||||
</ul>
|
||||
|
||||
<h2>Technology Stack</h2>
|
||||
<p>FastAPI (Python), Angular, PostgreSQL, Redis, Celery, RabbitMQ, Elasticsearch, Docker, Kubernetes, AWS, Stripe, PayPal</p>
|
||||
''',
|
||||
'category': categories['ui-ux'],
|
||||
'client': clients['melenpo'],
|
||||
'thumbnail_url': '/images/case/three.png',
|
||||
'poster_image_url': '/images/case/poster.png',
|
||||
'featured': False,
|
||||
'category': categories['enterprise-software'],
|
||||
'client': clients['undisclosed-client'],
|
||||
'thumbnail_url': 'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=800&h=600&fit=crop',
|
||||
'featured_image_url': 'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=1920&h=1080&fit=crop',
|
||||
'poster_image_url': 'https://images.unsplash.com/photo-1564501049412-61c2a3083791?w=1920&h=1080&fit=crop',
|
||||
'project_image_url': 'https://images.unsplash.com/photo-1564501049412-61c2a3083791?w=1200&h=800&fit=crop',
|
||||
'project_overview': '''
|
||||
<p>GNX Soft developed a comprehensive hotel booking and management platform that revolutionizes hospitality operations. Built with FastAPI backend and Angular frontend, the solution enables hotels to manage reservations, inventory, pricing, and guest services while processing millions of bookings annually across thousands of properties worldwide.</p>
|
||||
<p>The platform features real-time availability management, dynamic pricing strategies, seamless channel manager integration, and comprehensive reporting capabilities. With support for high concurrent traffic and intelligent inventory management, the solution ensures optimal revenue generation while preventing overbooking and maintaining exceptional user experience.</p>
|
||||
''',
|
||||
'site_map_content': '''
|
||||
<h3>Platform Architecture</h3>
|
||||
<p>The hotel booking platform follows a modern microservices architecture:</p>
|
||||
<ul>
|
||||
<li><strong>Frontend Layer:</strong> Angular-based responsive web application with progressive web app capabilities</li>
|
||||
<li><strong>API Layer:</strong> FastAPI RESTful APIs with async processing and high performance</li>
|
||||
<li><strong>Booking Engine:</strong> Real-time availability checking and reservation management</li>
|
||||
<li><strong>Pricing Engine:</strong> Dynamic pricing algorithms with rule-based and AI-driven strategies</li>
|
||||
<li><strong>Channel Manager:</strong> Integration layer for synchronizing with third-party booking channels</li>
|
||||
<li><strong>Payment Gateway:</strong> Secure payment processing with multiple provider support</li>
|
||||
<li><strong>Inventory Management:</strong> Real-time room inventory tracking and allocation</li>
|
||||
<li><strong>Analytics Dashboard:</strong> Comprehensive reporting and revenue management tools</li>
|
||||
</ul>
|
||||
''',
|
||||
'meta_description': 'Enterprise hotel booking platform case study: FastAPI and Angular solution for scalable hospitality management.',
|
||||
'meta_keywords': 'hotel booking, hospitality software, FastAPI, Angular, channel manager, dynamic pricing, booking engine',
|
||||
'featured': True,
|
||||
'published': True,
|
||||
'display_order': 2,
|
||||
'days_ago': 12
|
||||
},
|
||||
{
|
||||
'title': 'Enterprise POS System with National Revenue Integration',
|
||||
'slug': 'enterprise-pos-system-national-revenue-integration',
|
||||
'subtitle': 'Comprehensive Retail Management with External System Integration',
|
||||
'excerpt': 'GNX Soft developed an enterprise Point of Sale (POS) system integrated with national revenue authorities and multiple external systems. The solution handles millions of transactions daily across thousands of retail locations, ensuring compliance with tax regulations and seamless integration with payment processors, inventory systems, and government reporting platforms.',
|
||||
'description': '''
|
||||
<h2>Executive Summary</h2>
|
||||
<p>GNX Soft developed an enterprise Point of Sale (POS) system integrated with national revenue authorities and multiple external systems. The solution handles millions of transactions daily across thousands of retail locations, ensuring compliance with tax regulations and seamless integration with payment processors, inventory systems, and government reporting platforms.</p>
|
||||
|
||||
<h3>The Challenge</h3>
|
||||
<p>The client required a robust POS system that could integrate with national revenue authority systems for real-time tax reporting, connect with multiple payment gateways, synchronize with inventory management systems, and provide comprehensive reporting capabilities. The solution needed to handle high transaction volumes, ensure data security, maintain compliance with tax regulations, and support offline operations during network outages.</p>
|
||||
|
||||
<h3>Our Solution</h3>
|
||||
<p>We built a comprehensive enterprise POS platform featuring:</p>
|
||||
<ul>
|
||||
<li>Real-time transaction processing with offline capability</li>
|
||||
<li>National revenue authority integration for automatic tax reporting</li>
|
||||
<li>Multi-payment gateway support (credit cards, mobile payments, cash)</li>
|
||||
<li>Inventory management with real-time stock synchronization</li>
|
||||
<li>Customer relationship management (CRM) integration</li>
|
||||
<li>Loyalty program and rewards management</li>
|
||||
<li>Comprehensive sales reporting and analytics</li>
|
||||
<li>Multi-store and multi-location support</li>
|
||||
<li>Employee management and shift tracking</li>
|
||||
<li>Receipt printing and digital receipt delivery</li>
|
||||
<li>Barcode scanning and product lookup</li>
|
||||
<li>Secure payment processing with PCI-DSS compliance</li>
|
||||
</ul>
|
||||
|
||||
<h3>Key Results</h3>
|
||||
<ul>
|
||||
<li>99.9% system uptime with offline transaction support</li>
|
||||
<li>Processing of 10+ million transactions monthly</li>
|
||||
<li>100% compliance with national tax reporting requirements</li>
|
||||
<li>Real-time integration with national revenue authority systems</li>
|
||||
<li>50% reduction in manual tax reporting time</li>
|
||||
<li>Seamless integration with 15+ external systems</li>
|
||||
<li>30% improvement in transaction processing speed</li>
|
||||
<li>Zero data loss during network outages</li>
|
||||
<li>Comprehensive audit trail for all transactions</li>
|
||||
</ul>
|
||||
|
||||
<h2>Technology Stack</h2>
|
||||
<p>Java (Spring Boot), React, PostgreSQL, Redis, RabbitMQ, REST APIs, SOAP, Docker, Kubernetes, AWS, Payment Gateway APIs, National Revenue Authority APIs</p>
|
||||
''',
|
||||
'category': categories['system-integration'],
|
||||
'client': clients['undisclosed-client'],
|
||||
'thumbnail_url': 'https://images.unsplash.com/photo-1556742049-0cfed4f6a45d?w=800&h=600&fit=crop',
|
||||
'featured_image_url': 'https://images.unsplash.com/photo-1556742049-0cfed4f6a45d?w=1920&h=1080&fit=crop',
|
||||
'poster_image_url': 'https://images.unsplash.com/photo-1556740758-90de374c12ad?w=1920&h=1080&fit=crop',
|
||||
'project_image_url': 'https://images.unsplash.com/photo-1556740758-90de374c12ad?w=1200&h=800&fit=crop',
|
||||
'project_overview': '''
|
||||
<p>GNX Soft developed an enterprise Point of Sale (POS) system that revolutionizes retail operations through seamless integration with national revenue authorities and multiple external systems. The solution processes millions of transactions daily across thousands of retail locations, ensuring real-time tax compliance, secure payment processing, and comprehensive business intelligence.</p>
|
||||
<p>Our platform features robust offline capabilities, ensuring business continuity during network outages. The system integrates with payment processors, inventory management systems, customer relationship management platforms, and government reporting systems, providing a unified solution for modern retail operations.</p>
|
||||
''',
|
||||
'site_map_content': '''
|
||||
<h3>System Architecture</h3>
|
||||
<p>The enterprise POS system follows a distributed architecture with comprehensive integration capabilities:</p>
|
||||
<ul>
|
||||
<li><strong>POS Terminal:</strong> React-based touchscreen interface for transaction processing</li>
|
||||
<li><strong>Backend Services:</strong> Java Spring Boot microservices for business logic and data processing</li>
|
||||
<li><strong>Payment Gateway Integration:</strong> Secure integration with multiple payment processors</li>
|
||||
<li><strong>National Revenue Authority:</strong> Real-time tax reporting and compliance integration</li>
|
||||
<li><strong>Inventory System:</strong> Real-time stock synchronization and product management</li>
|
||||
<li><strong>CRM Integration:</strong> Customer data synchronization and loyalty program management</li>
|
||||
<li><strong>Reporting Engine:</strong> Comprehensive analytics and business intelligence</li>
|
||||
<li><strong>Offline Mode:</strong> Local transaction storage with automatic synchronization</li>
|
||||
</ul>
|
||||
''',
|
||||
'meta_description': 'Enterprise POS system case study: National revenue integration with external systems for retail management.',
|
||||
'meta_keywords': 'POS system, point of sale, retail software, tax integration, payment processing, enterprise software',
|
||||
'featured': True,
|
||||
'published': True,
|
||||
'display_order': 3,
|
||||
'days_ago': 20
|
||||
},
|
||||
{
|
||||
'title': 'Photography is the art, application, and practice',
|
||||
'subtitle': 'Professional Photography Portfolio',
|
||||
'title': 'Enterprise Cloud Infrastructure Migration',
|
||||
'slug': 'enterprise-cloud-infrastructure-migration',
|
||||
'subtitle': 'Large-Scale Digital Transformation Initiative',
|
||||
'excerpt': 'GNX Soft executed a comprehensive cloud infrastructure migration for a major enterprise, migrating 1000+ applications and services from legacy on-premises infrastructure to a modern cloud-native architecture. The project involved zero-downtime migration strategies, containerization, and complete infrastructure modernization.',
|
||||
'description': '''
|
||||
<h2>About This Project</h2>
|
||||
<p>A stunning photography project that captures the essence of modern visual storytelling. This portfolio demonstrates our expertise in various photography styles and techniques.</p>
|
||||
<h2>Executive Summary</h2>
|
||||
<p>GNX Soft executed a comprehensive cloud infrastructure migration for a major enterprise, migrating 1000+ applications and services from legacy on-premises infrastructure to a modern cloud-native architecture. The project involved zero-downtime migration strategies, containerization, and complete infrastructure modernization across multiple business units.</p>
|
||||
|
||||
<h3>Photography Style</h3>
|
||||
<p>The project incorporates multiple photography styles including product photography, portrait photography, and architectural photography. Each image is carefully composed and post-processed to achieve the desired aesthetic.</p>
|
||||
<h3>The Challenge</h3>
|
||||
<p>The client operated a complex legacy infrastructure with thousands of applications running on outdated hardware and software. They needed to modernize their entire IT landscape while maintaining business continuity, ensuring security compliance, and achieving significant cost reductions. The migration required careful planning to avoid service disruptions and ensure seamless transition.</p>
|
||||
|
||||
<h2>Technical Excellence</h2>
|
||||
<p>Using professional-grade equipment and advanced lighting techniques, we created images that stand out in quality and artistic vision.</p>
|
||||
<h3>Our Solution</h3>
|
||||
<p>We implemented a comprehensive cloud migration strategy including:</p>
|
||||
<ul>
|
||||
<li>Complete infrastructure assessment and dependency mapping</li>
|
||||
<li>Application containerization using Docker and Kubernetes</li>
|
||||
<li>Microservices architecture transformation</li>
|
||||
<li>Zero-downtime migration strategies with blue-green deployments</li>
|
||||
<li>Automated CI/CD pipelines for continuous deployment</li>
|
||||
<li>Cloud-native monitoring and observability</li>
|
||||
<li>Security hardening and compliance validation</li>
|
||||
<li>Disaster recovery and backup solutions</li>
|
||||
<li>Cost optimization and resource management</li>
|
||||
<li>Comprehensive staff training and knowledge transfer</li>
|
||||
</ul>
|
||||
|
||||
<h3>Key Results</h3>
|
||||
<ul>
|
||||
<li>100% successful migration of 1000+ applications</li>
|
||||
<li>Zero business disruption during migration</li>
|
||||
<li>60% reduction in infrastructure costs</li>
|
||||
<li>99.99% uptime maintained throughout migration</li>
|
||||
<li>70% improvement in application deployment speed</li>
|
||||
<li>Complete security and compliance certification</li>
|
||||
<li>Automated scaling and resource optimization</li>
|
||||
<li>24/7 monitoring and alerting capabilities</li>
|
||||
</ul>
|
||||
|
||||
<h2>Technology Stack</h2>
|
||||
<p>Docker, Kubernetes, AWS, Azure, Terraform, Ansible, Jenkins, GitLab CI/CD, Prometheus, Grafana, ELK Stack, CloudWatch</p>
|
||||
''',
|
||||
'category': categories['photography'],
|
||||
'client': None,
|
||||
'thumbnail_url': '/images/case/four.png',
|
||||
'poster_image_url': '/images/case/poster.png',
|
||||
'category': categories['cloud-migration'],
|
||||
'client': clients['undisclosed-client'],
|
||||
'thumbnail_url': 'https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=800&h=600&fit=crop',
|
||||
'featured_image_url': 'https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=1920&h=1080&fit=crop',
|
||||
'poster_image_url': 'https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1920&h=1080&fit=crop',
|
||||
'project_image_url': 'https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1200&h=800&fit=crop',
|
||||
'project_overview': '''
|
||||
<p>GNX Soft executed a comprehensive cloud infrastructure migration that transformed the entire IT landscape of a major enterprise. The project successfully migrated 1000+ applications and services from legacy on-premises infrastructure to a modern cloud-native architecture, achieving zero downtime and significant cost savings.</p>
|
||||
<p>Our team implemented containerization strategies, microservices architecture, and automated deployment pipelines to ensure scalability, reliability, and operational efficiency. The migration included comprehensive security hardening, compliance validation, and disaster recovery solutions, ensuring business continuity and regulatory compliance.</p>
|
||||
''',
|
||||
'site_map_content': '''
|
||||
<h3>Migration Architecture</h3>
|
||||
<p>The cloud migration followed a structured, phased approach:</p>
|
||||
<ul>
|
||||
<li><strong>Assessment Phase:</strong> Comprehensive infrastructure audit, application inventory, and dependency mapping</li>
|
||||
<li><strong>Planning Phase:</strong> Migration strategy development, risk assessment, and timeline planning</li>
|
||||
<li><strong>Pilot Phase:</strong> Small-scale migration of non-critical applications to validate approach</li>
|
||||
<li><strong>Migration Phase:</strong> Systematic migration of all applications using blue-green deployment strategies</li>
|
||||
<li><strong>Optimization Phase:</strong> Performance tuning, cost optimization, and continuous improvement</li>
|
||||
<li><strong>Operations Phase:</strong> 24/7 monitoring, automated scaling, and ongoing support</li>
|
||||
</ul>
|
||||
''',
|
||||
'meta_description': 'Enterprise cloud migration case study: Zero-downtime migration of 1000+ applications to cloud-native architecture.',
|
||||
'meta_keywords': 'cloud migration, digital transformation, containerization, Kubernetes, microservices, enterprise infrastructure',
|
||||
'featured': False,
|
||||
'published': True,
|
||||
'display_order': 4,
|
||||
'days_ago': 25
|
||||
},
|
||||
{
|
||||
'title': 'UX case study for a medical app- medical product design',
|
||||
'subtitle': 'Healthcare UX Innovation',
|
||||
'description': '''
|
||||
<h2>Healthcare Design Challenge</h2>
|
||||
<p>Designing for healthcare requires special attention to accessibility, security, and user trust. This medical app design project showcases our expertise in creating intuitive interfaces for complex healthcare workflows.</p>
|
||||
|
||||
<h3>Compliance and Security</h3>
|
||||
<p>The design adheres to HIPAA regulations and industry best practices for healthcare data security while maintaining an intuitive user experience.</p>
|
||||
|
||||
<h2>User Research</h2>
|
||||
<p>We conducted extensive research with healthcare professionals and patients to ensure the design meets the needs of all stakeholders.</p>
|
||||
''',
|
||||
'category': categories['ui-ux'],
|
||||
'client': clients['polax'],
|
||||
'thumbnail_url': '/images/case/five.png',
|
||||
'poster_image_url': '/images/case/poster.png',
|
||||
'featured': False,
|
||||
'display_order': 5,
|
||||
'days_ago': 30
|
||||
},
|
||||
{
|
||||
'title': 'Make icon set for the educational project',
|
||||
'subtitle': 'Custom Educational Icon Set',
|
||||
'title': 'Enterprise Financial Management System',
|
||||
'slug': 'enterprise-financial-management-system',
|
||||
'subtitle': 'Comprehensive Financial Operations Platform',
|
||||
'excerpt': 'GNX Soft developed an enterprise financial management system that handles complex accounting, financial reporting, budgeting, and compliance requirements for large organizations. The platform integrates with banking systems, payment processors, and regulatory reporting platforms, ensuring real-time financial visibility and compliance.',
|
||||
'description': '''
|
||||
<h2>Icon Design Project</h2>
|
||||
<p>A comprehensive icon set designed specifically for educational platforms. This project demonstrates our ability to create cohesive, scalable, and meaningful iconography.</p>
|
||||
<h2>Executive Summary</h2>
|
||||
<p>GNX Soft developed an enterprise financial management system that handles complex accounting, financial reporting, budgeting, and compliance requirements for large organizations. The platform integrates with banking systems, payment processors, and regulatory reporting platforms, ensuring real-time financial visibility and compliance with international accounting standards.</p>
|
||||
|
||||
<h3>Design Principles</h3>
|
||||
<p>The icons follow consistent design principles including size, style, and metaphor. Each icon is designed to be instantly recognizable and appropriate for educational contexts.</p>
|
||||
<h3>The Challenge</h3>
|
||||
<p>The client required a comprehensive financial management solution that could handle multi-currency transactions, complex accounting rules, regulatory compliance, and real-time financial reporting. The system needed to integrate with multiple banking systems, support various payment methods, and provide detailed audit trails for compliance purposes.</p>
|
||||
|
||||
<h2>Deliverables</h2>
|
||||
<p>The final deliverable includes icons in multiple formats (SVG, PNG) and sizes, along with comprehensive usage guidelines.</p>
|
||||
<h3>Our Solution</h3>
|
||||
<p>We built a robust financial management platform featuring:</p>
|
||||
<ul>
|
||||
<li>General ledger and chart of accounts management</li>
|
||||
<li>Accounts payable and receivable processing</li>
|
||||
<li>Multi-currency transaction handling</li>
|
||||
<li>Financial reporting and analytics dashboards</li>
|
||||
<li>Budget planning and variance analysis</li>
|
||||
<li>Bank reconciliation and cash management</li>
|
||||
<li>Tax calculation and compliance reporting</li>
|
||||
<li>Integration with banking systems and payment gateways</li>
|
||||
<li>Audit trail and compliance tracking</li>
|
||||
<li>Role-based access control and security</li>
|
||||
<li>Automated workflow approvals</li>
|
||||
<li>Real-time financial dashboards</li>
|
||||
</ul>
|
||||
|
||||
<h3>Key Results</h3>
|
||||
<ul>
|
||||
<li>99.9% system uptime ensuring continuous financial operations</li>
|
||||
<li>80% reduction in manual financial reporting time</li>
|
||||
<li>100% compliance with international accounting standards</li>
|
||||
<li>Real-time financial visibility across all business units</li>
|
||||
<li>Automated reconciliation reducing errors by 95%</li>
|
||||
<li>Seamless integration with 20+ banking and payment systems</li>
|
||||
<li>Comprehensive audit trail for regulatory compliance</li>
|
||||
<li>Multi-currency support for global operations</li>
|
||||
</ul>
|
||||
|
||||
<h2>Technology Stack</h2>
|
||||
<p>Java (Spring Boot), React, PostgreSQL, Redis, RabbitMQ, REST APIs, Docker, Kubernetes, AWS, Banking APIs, Payment Gateway APIs</p>
|
||||
''',
|
||||
'category': categories['icon-set'],
|
||||
'client': None,
|
||||
'thumbnail_url': '/images/case/six.png',
|
||||
'poster_image_url': '/images/case/poster.png',
|
||||
'featured': False,
|
||||
'display_order': 6,
|
||||
'days_ago': 35
|
||||
},
|
||||
{
|
||||
'title': 'AI-driven user experience design process',
|
||||
'subtitle': 'AI-Driven User Experience',
|
||||
'description': '''
|
||||
<h2>AI-Enhanced UX Design</h2>
|
||||
<p>This project combines artificial intelligence with user experience design to create adaptive interfaces that learn from user behavior and preferences.</p>
|
||||
|
||||
<h3>Innovation</h3>
|
||||
<p>The design incorporates machine learning algorithms that personalize the user experience based on individual usage patterns and preferences.</p>
|
||||
'category': categories['enterprise-software'],
|
||||
'client': clients['undisclosed-client'],
|
||||
'thumbnail_url': 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=800&h=600&fit=crop',
|
||||
'featured_image_url': 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=1920&h=1080&fit=crop',
|
||||
'poster_image_url': 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1920&h=1080&fit=crop',
|
||||
'project_image_url': 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop',
|
||||
'project_overview': '''
|
||||
<p>GNX Soft developed an enterprise financial management system that revolutionizes financial operations for large organizations. The platform handles complex accounting, financial reporting, budgeting, and compliance requirements while integrating seamlessly with banking systems, payment processors, and regulatory reporting platforms.</p>
|
||||
<p>Our solution provides real-time financial visibility, automated reconciliation, and comprehensive compliance tracking. The system supports multi-currency transactions, complex accounting rules, and provides detailed audit trails, ensuring regulatory compliance and operational efficiency.</p>
|
||||
''',
|
||||
'category': categories['ai'],
|
||||
'client': clients['aina'],
|
||||
'thumbnail_url': '/images/case/seven.png',
|
||||
'poster_image_url': '/images/case/poster.png',
|
||||
'featured': False,
|
||||
'display_order': 7,
|
||||
'days_ago': 40
|
||||
},
|
||||
{
|
||||
'title': 'UX site rode map app product design system',
|
||||
'subtitle': 'Product Roadmap Visualization',
|
||||
'description': '''
|
||||
<h2>Product Roadmap Design</h2>
|
||||
<p>A comprehensive product roadmap visualization system that helps teams plan, communicate, and execute their product strategy effectively.</p>
|
||||
|
||||
<h3>Features</h3>
|
||||
<p>The roadmap system includes timeline views, milestone tracking, dependency mapping, and collaboration tools for distributed teams.</p>
|
||||
|
||||
<h2>Implementation</h2>
|
||||
<p>Built with modern web technologies and optimized for performance and usability across all devices and platforms.</p>
|
||||
'site_map_content': '''
|
||||
<h3>System Architecture</h3>
|
||||
<p>The financial management system follows a modular architecture:</p>
|
||||
<ul>
|
||||
<li><strong>Accounting Module:</strong> General ledger, chart of accounts, and transaction processing</li>
|
||||
<li><strong>Payables & Receivables:</strong> Invoice management and payment processing</li>
|
||||
<li><strong>Financial Reporting:</strong> Real-time reporting and analytics dashboards</li>
|
||||
<li><strong>Budget Management:</strong> Budget planning, tracking, and variance analysis</li>
|
||||
<li><strong>Banking Integration:</strong> Real-time bank reconciliation and cash management</li>
|
||||
<li><strong>Compliance Engine:</strong> Tax calculation and regulatory reporting</li>
|
||||
<li><strong>Audit System:</strong> Comprehensive audit trail and compliance tracking</li>
|
||||
</ul>
|
||||
''',
|
||||
'category': categories['road-map'],
|
||||
'client': None,
|
||||
'thumbnail_url': '/images/case/eight.png',
|
||||
'poster_image_url': '/images/case/poster.png',
|
||||
'meta_description': 'Enterprise financial management system: Comprehensive financial operations platform with banking integration.',
|
||||
'meta_keywords': 'financial management, accounting software, ERP, financial reporting, compliance, enterprise software',
|
||||
'featured': False,
|
||||
'display_order': 8,
|
||||
'published': True,
|
||||
'display_order': 5,
|
||||
'days_ago': 45
|
||||
},
|
||||
{
|
||||
'title': 'Enterprise Customer Relationship Management Platform',
|
||||
'slug': 'enterprise-customer-relationship-management-platform',
|
||||
'subtitle': 'Unified Customer Engagement Solution',
|
||||
'excerpt': 'GNX Soft developed a comprehensive Customer Relationship Management (CRM) platform that unifies customer data, sales processes, marketing automation, and customer service across all touchpoints. The solution provides 360-degree customer view, predictive analytics, and automated workflows to enhance customer engagement and drive revenue growth.',
|
||||
'description': '''
|
||||
<h2>Executive Summary</h2>
|
||||
<p>GNX Soft developed a comprehensive Customer Relationship Management (CRM) platform that unifies customer data, sales processes, marketing automation, and customer service across all touchpoints. The solution provides 360-degree customer view, predictive analytics, and automated workflows to enhance customer engagement and drive revenue growth.</p>
|
||||
|
||||
<h3>The Challenge</h3>
|
||||
<p>The client needed a unified CRM solution that could consolidate customer data from multiple sources, automate sales and marketing processes, provide comprehensive analytics, and integrate with various business systems. The platform needed to support large sales teams, handle complex customer journeys, and provide actionable insights for business growth.</p>
|
||||
|
||||
<h3>Our Solution</h3>
|
||||
<p>We built an enterprise CRM platform with comprehensive capabilities:</p>
|
||||
<ul>
|
||||
<li>360-degree customer profile with unified data view</li>
|
||||
<li>Sales pipeline management and opportunity tracking</li>
|
||||
<li>Marketing automation and campaign management</li>
|
||||
<li>Customer service ticketing and support management</li>
|
||||
<li>Lead scoring and qualification automation</li>
|
||||
<li>Email and communication tracking</li>
|
||||
<li>Document management and collaboration</li>
|
||||
<li>Predictive analytics and AI-powered insights</li>
|
||||
<li>Workflow automation and process management</li>
|
||||
<li>Integration with email, calendar, and communication tools</li>
|
||||
<li>Mobile applications for field sales teams</li>
|
||||
<li>Comprehensive reporting and analytics dashboards</li>
|
||||
</ul>
|
||||
|
||||
<h3>Key Results</h3>
|
||||
<ul>
|
||||
<li>40% increase in sales productivity</li>
|
||||
<li>35% improvement in lead conversion rates</li>
|
||||
<li>50% reduction in customer response time</li>
|
||||
<li>Unified view of all customer interactions</li>
|
||||
<li>Automated workflows reducing manual tasks by 60%</li>
|
||||
<li>Real-time analytics enabling data-driven decisions</li>
|
||||
<li>Seamless integration with 30+ business systems</li>
|
||||
<li>Mobile access enabling field sales effectiveness</li>
|
||||
</ul>
|
||||
|
||||
<h2>Technology Stack</h2>
|
||||
<p>Python (Django), React, PostgreSQL, Redis, Celery, RabbitMQ, Elasticsearch, Docker, Kubernetes, AWS, Machine Learning APIs</p>
|
||||
''',
|
||||
'category': categories['digital-transformation'],
|
||||
'client': clients['undisclosed-client'],
|
||||
'thumbnail_url': 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=800&h=600&fit=crop',
|
||||
'featured_image_url': 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=1920&h=1080&fit=crop',
|
||||
'poster_image_url': 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1920&h=1080&fit=crop',
|
||||
'project_image_url': 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop',
|
||||
'project_overview': '''
|
||||
<p>GNX Soft developed a comprehensive Customer Relationship Management (CRM) platform that transforms how organizations engage with customers. The solution unifies customer data, sales processes, marketing automation, and customer service, providing a 360-degree view of customer interactions and enabling data-driven decision making.</p>
|
||||
<p>Our platform features predictive analytics, automated workflows, and seamless integrations with business systems. The solution enhances sales productivity, improves lead conversion, and enables personalized customer experiences through AI-powered insights and automation.</p>
|
||||
''',
|
||||
'site_map_content': '''
|
||||
<h3>Platform Architecture</h3>
|
||||
<p>The CRM platform consists of integrated modules:</p>
|
||||
<ul>
|
||||
<li><strong>Customer Data Hub:</strong> Unified customer profile with data from all touchpoints</li>
|
||||
<li><strong>Sales Management:</strong> Pipeline tracking, opportunity management, and sales forecasting</li>
|
||||
<li><strong>Marketing Automation:</strong> Campaign management, lead nurturing, and email marketing</li>
|
||||
<li><strong>Customer Service:</strong> Ticketing system, knowledge base, and support management</li>
|
||||
<li><strong>Analytics Engine:</strong> Predictive analytics, reporting, and business intelligence</li>
|
||||
<li><strong>Integration Layer:</strong> Connectors for email, calendar, communication, and business systems</li>
|
||||
<li><strong>Mobile Platform:</strong> Native mobile apps for sales and service teams</li>
|
||||
</ul>
|
||||
''',
|
||||
'meta_description': 'Enterprise CRM platform: Unified customer engagement solution with predictive analytics and automation.',
|
||||
'meta_keywords': 'CRM, customer relationship management, sales automation, marketing automation, customer engagement',
|
||||
'featured': False,
|
||||
'published': True,
|
||||
'display_order': 6,
|
||||
'days_ago': 60
|
||||
}
|
||||
]
|
||||
|
||||
# Process steps templates
|
||||
process_templates = [
|
||||
[
|
||||
{'step_number': 1, 'title': 'Requirements Analysis', 'description': 'Understanding healthcare workflows, HIPAA compliance requirements, and telemedicine needs.'},
|
||||
{'step_number': 2, 'title': 'System Design', 'description': 'Designing HIPAA-compliant architecture with Java Spring Boot backend and React frontend.'},
|
||||
{'step_number': 3, 'title': 'Core Development', 'description': 'Building video consultation engine, patient portal, and appointment management system.'},
|
||||
{'step_number': 4, 'title': 'Integration', 'description': 'Integrating with EHR systems, payment gateways, and pharmacy services.'},
|
||||
{'step_number': 5, 'title': 'Testing & Certification', 'description': 'Rigorous testing, HIPAA compliance validation, and production deployment.'}
|
||||
],
|
||||
[
|
||||
{'step_number': 1, 'title': 'Architecture Design', 'description': 'Designing scalable microservices architecture with FastAPI backend and Angular frontend.'},
|
||||
{'step_number': 2, 'title': 'Core Development', 'description': 'Building booking engine, inventory management, and pricing engine.'},
|
||||
{'step_number': 3, 'title': 'Integration', 'description': 'Integrating with channel managers, payment gateways, and third-party booking platforms.'},
|
||||
{'step_number': 4, 'title': 'Advanced Features', 'description': 'Implementing dynamic pricing, analytics dashboard, and mobile optimization.'},
|
||||
{'step_number': 5, 'title': 'Performance Optimization', 'description': 'Optimizing for high traffic, real-time synchronization, and scalability.'}
|
||||
],
|
||||
[
|
||||
{'step_number': 1, 'title': 'Requirements Gathering', 'description': 'Understanding retail operations, tax compliance requirements, and integration needs.'},
|
||||
{'step_number': 2, 'title': 'System Design', 'description': 'Designing POS architecture with Java backend, React frontend, and external system integrations.'},
|
||||
{'step_number': 3, 'title': 'Core Development', 'description': 'Building transaction processing, inventory management, and payment processing modules.'},
|
||||
{'step_number': 4, 'title': 'External Integration', 'description': 'Integrating with national revenue authority, payment gateways, and inventory systems.'},
|
||||
{'step_number': 5, 'title': 'Testing & Deployment', 'description': 'Comprehensive testing, compliance validation, and multi-location deployment.'}
|
||||
],
|
||||
[
|
||||
{'step_number': 1, 'title': 'Infrastructure Assessment', 'description': 'Comprehensive evaluation of existing infrastructure, applications, and dependencies.'},
|
||||
{'step_number': 2, 'title': 'Migration Planning', 'description': 'Detailed migration strategy, containerization plan, and zero-downtime approach.'},
|
||||
{'step_number': 3, 'title': 'Containerization', 'description': 'Application containerization using Docker and Kubernetes orchestration setup.'},
|
||||
{'step_number': 4, 'title': 'Phased Migration', 'description': 'Systematic migration of applications with blue-green deployment strategies.'},
|
||||
{'step_number': 5, 'title': 'Optimization & Operations', 'description': 'Performance tuning, cost optimization, and 24/7 monitoring setup.'}
|
||||
],
|
||||
[
|
||||
{'step_number': 1, 'title': 'Requirements Analysis', 'description': 'Understanding financial operations, accounting standards, and compliance requirements.'},
|
||||
{'step_number': 2, 'title': 'System Design', 'description': 'Designing financial management architecture with Java backend and React frontend.'},
|
||||
{'step_number': 3, 'title': 'Core Development', 'description': 'Building accounting modules, financial reporting, and budget management systems.'},
|
||||
{'step_number': 4, 'title': 'Integration', 'description': 'Integrating with banking systems, payment processors, and regulatory reporting platforms.'},
|
||||
{'step_number': 5, 'title': 'Testing & Compliance', 'description': 'Rigorous testing, compliance validation, and production deployment.'}
|
||||
],
|
||||
[
|
||||
{'step_number': 1, 'title': 'Requirements Gathering', 'description': 'Understanding customer engagement needs, sales processes, and integration requirements.'},
|
||||
{'step_number': 2, 'title': 'System Design', 'description': 'Designing CRM architecture with Python Django backend and React frontend.'},
|
||||
{'step_number': 3, 'title': 'Core Development', 'description': 'Building customer data hub, sales pipeline, and marketing automation modules.'},
|
||||
{'step_number': 4, 'title': 'Advanced Features', 'description': 'Implementing predictive analytics, workflow automation, and mobile applications.'},
|
||||
{'step_number': 5, 'title': 'Integration & Deployment', 'description': 'Integrating with business systems, comprehensive testing, and production rollout.'}
|
||||
]
|
||||
]
|
||||
|
||||
# Create case studies
|
||||
created_case_studies = []
|
||||
for cs_data in case_studies_data:
|
||||
for idx, cs_data in enumerate(case_studies_data):
|
||||
days_ago = cs_data.pop('days_ago')
|
||||
|
||||
case_study = CaseStudy.objects.create(
|
||||
@@ -304,30 +578,8 @@ class Command(BaseCommand):
|
||||
)
|
||||
created_case_studies.append(case_study)
|
||||
|
||||
# Add gallery images
|
||||
gallery_images = [
|
||||
'/images/case/nine.png',
|
||||
'/images/case/ten.png',
|
||||
'/images/case/eleven.png',
|
||||
'/images/case/twelve.png'
|
||||
]
|
||||
|
||||
for idx, img_url in enumerate(gallery_images, 1):
|
||||
CaseStudyImage.objects.create(
|
||||
case_study=case_study,
|
||||
image_url=img_url,
|
||||
caption=f'Gallery Image {idx}',
|
||||
display_order=idx
|
||||
)
|
||||
|
||||
# Add process steps
|
||||
processes = [
|
||||
{'step_number': 1, 'title': 'Computer Vision', 'description': 'Quisque varius malesuada dui, ut posuere purus gravida in. Phasellus ultricies ullamcorper mollis.'},
|
||||
{'step_number': 2, 'title': 'Computer Vision', 'description': 'Quisque varius malesuada dui, ut posuere purus gravida in. Phasellus ultricies ullamcorper mollis.'},
|
||||
{'step_number': 3, 'title': '3D Vision', 'description': 'Quisque varius malesuada dui, ut posuere purus gravida in. Phasellus ultricies ullamcorper mollis.'},
|
||||
{'step_number': 4, 'title': 'Computer Vision', 'description': 'Quisque varius malesuada dui, ut posuere purus gravida in. Phasellus ultricies ullamcorper mollis.'},
|
||||
{'step_number': 5, 'title': '3D Vision', 'description': 'Quisque varius malesuada dui, ut posuere purus gravida in. Phasellus ultricies ullamcorper mollis.'},
|
||||
]
|
||||
processes = process_templates[idx % len(process_templates)]
|
||||
|
||||
for process_data in processes:
|
||||
CaseStudyProcess.objects.create(
|
||||
@@ -337,10 +589,8 @@ class Command(BaseCommand):
|
||||
|
||||
self.stdout.write(f'Created case study: {case_study.title}')
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('\nSuccessfully populated case study data!'))
|
||||
self.stdout.write(self.style.SUCCESS('\nSuccessfully populated enterprise case study data!'))
|
||||
self.stdout.write(f'Created {CaseStudyCategory.objects.count()} categories')
|
||||
self.stdout.write(f'Created {Client.objects.count()} clients')
|
||||
self.stdout.write(f'Created {CaseStudy.objects.count()} case studies')
|
||||
self.stdout.write(f'Created {CaseStudyImage.objects.count()} gallery images')
|
||||
self.stdout.write(f'Created {CaseStudyProcess.objects.count()} process steps')
|
||||
|
||||
|
||||
@@ -47,10 +47,11 @@ class CaseStudyProcessSerializer(serializers.ModelSerializer):
|
||||
|
||||
class CaseStudyListSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for case study list view"""
|
||||
category_name = serializers.CharField(source='category.name', read_only=True)
|
||||
category_slug = serializers.CharField(source='category.slug', read_only=True)
|
||||
client_name = serializers.CharField(source='client.name', read_only=True, allow_null=True)
|
||||
category_name = serializers.SerializerMethodField()
|
||||
category_slug = serializers.SerializerMethodField()
|
||||
client_name = serializers.SerializerMethodField()
|
||||
thumbnail = serializers.SerializerMethodField()
|
||||
excerpt = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = CaseStudy
|
||||
@@ -61,6 +62,25 @@ class CaseStudyListSerializer(serializers.ModelSerializer):
|
||||
'views_count', 'featured', 'published', 'display_order'
|
||||
]
|
||||
|
||||
def get_category_name(self, obj):
|
||||
return obj.category.name if obj.category else None
|
||||
|
||||
def get_category_slug(self, obj):
|
||||
return obj.category.slug if obj.category else None
|
||||
|
||||
def get_client_name(self, obj):
|
||||
return obj.client.name if obj.client else None
|
||||
|
||||
def get_excerpt(self, obj):
|
||||
if obj.excerpt:
|
||||
return obj.excerpt
|
||||
if obj.description:
|
||||
# Strip HTML tags and get first 200 characters
|
||||
import re
|
||||
text = re.sub(r'<[^>]+>', '', obj.description)
|
||||
return text[:200] + '...' if len(text) > 200 else text
|
||||
return ''
|
||||
|
||||
def get_thumbnail(self, obj):
|
||||
return obj.get_thumbnail_url
|
||||
|
||||
@@ -103,6 +123,12 @@ class CaseStudyDetailSerializer(serializers.ModelSerializer):
|
||||
|
||||
def get_related_case_studies(self, obj):
|
||||
"""Get related case studies from the same category"""
|
||||
if not obj.category:
|
||||
# If no category, get any published case studies
|
||||
related = CaseStudy.objects.filter(
|
||||
published=True
|
||||
).exclude(id=obj.id)[:3]
|
||||
else:
|
||||
related = CaseStudy.objects.filter(
|
||||
category=obj.category,
|
||||
published=True
|
||||
|
||||
@@ -7,7 +7,7 @@ from .views import (
|
||||
)
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register(r'case-studies', CaseStudyViewSet, basename='case-study')
|
||||
router.register(r'', CaseStudyViewSet, basename='case-study')
|
||||
router.register(r'categories', CaseStudyCategoryViewSet, basename='case-study-category')
|
||||
router.register(r'clients', ClientViewSet, basename='client')
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.pagination import PageNumberPagination
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from django.db.models import Q
|
||||
from .models import CaseStudy, CaseStudyCategory, Client
|
||||
from django.db.models import Q, Prefetch
|
||||
from .models import CaseStudy, CaseStudyCategory, Client, CaseStudyImage, CaseStudyProcess
|
||||
from .serializers import (
|
||||
CaseStudyListSerializer,
|
||||
CaseStudyDetailSerializer,
|
||||
@@ -42,6 +42,12 @@ class CaseStudyViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
def get_queryset(self):
|
||||
queryset = super().get_queryset()
|
||||
|
||||
# Always optimize foreign key lookups
|
||||
queryset = queryset.select_related('category', 'client')
|
||||
|
||||
# Don't add prefetch_related here for retrieve action - it's handled in retrieve() method
|
||||
# to avoid duplicate prefetch lookups
|
||||
|
||||
# Filter by category
|
||||
category_slug = self.request.query_params.get('category', None)
|
||||
if category_slug and category_slug != 'all':
|
||||
@@ -64,9 +70,31 @@ class CaseStudyViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
return queryset.distinct()
|
||||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
"""Override retrieve to increment view count"""
|
||||
instance = self.get_object()
|
||||
"""Override retrieve to increment view count and ensure optimized queryset"""
|
||||
# Get the base queryset (without prefetch_related to avoid duplicates)
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
|
||||
# Now add prefetch_related for detail view optimization
|
||||
queryset = queryset.prefetch_related(
|
||||
Prefetch(
|
||||
'gallery_images',
|
||||
queryset=CaseStudyImage.objects.order_by('display_order', 'created_at')
|
||||
),
|
||||
Prefetch(
|
||||
'process_steps',
|
||||
queryset=CaseStudyProcess.objects.order_by('step_number')
|
||||
)
|
||||
)
|
||||
|
||||
# Get the object using the optimized queryset
|
||||
lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
|
||||
filter_kwargs = {self.lookup_field: kwargs[lookup_url_kwarg]}
|
||||
instance = queryset.get(**filter_kwargs)
|
||||
|
||||
# Increment view count
|
||||
instance.increment_views()
|
||||
|
||||
# Serialize and return
|
||||
serializer = self.get_serializer(instance)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
@@ -101,6 +101,8 @@ def send_contact_submission_notification(submission):
|
||||
# Prepare email context
|
||||
context = {
|
||||
'submission': submission,
|
||||
'logo_url': f'{settings.SITE_URL}/images/logo.png',
|
||||
'site_url': settings.SITE_URL,
|
||||
}
|
||||
|
||||
# Render email templates
|
||||
@@ -170,45 +172,36 @@ def send_contact_submission_confirmation(submission):
|
||||
# Prepare email context
|
||||
context = {
|
||||
'submission': submission,
|
||||
'logo_url': f'{settings.SITE_URL}/images/logo.png',
|
||||
'site_url': settings.SITE_URL,
|
||||
}
|
||||
|
||||
# Create simple confirmation email
|
||||
# Create confirmation email
|
||||
subject = "Thank you for contacting GNX Software Solutions"
|
||||
|
||||
# Simple text email for confirmation
|
||||
message = f"""
|
||||
Dear {submission.full_name},
|
||||
# Render HTML email template
|
||||
html_content = render_to_string(
|
||||
'contact/contact_submission_confirmation.html',
|
||||
context
|
||||
)
|
||||
|
||||
Thank you for reaching out to GNX Software Solutions!
|
||||
|
||||
We have received your inquiry about {submission.get_project_type_display() if submission.project_type else 'your project'} and will review it carefully.
|
||||
|
||||
Here are the details of your submission:
|
||||
- Submission ID: #{submission.id}
|
||||
- Company: {submission.company}
|
||||
- Project Type: {submission.get_project_type_display() if submission.project_type else 'Not specified'}
|
||||
- Timeline: {submission.get_timeline_display() if submission.timeline else 'Not specified'}
|
||||
|
||||
Our team will contact you within 24 hours to discuss your project requirements and how we can help you achieve your goals.
|
||||
|
||||
If you have any urgent questions, please don't hesitate to contact us directly.
|
||||
|
||||
Best regards,
|
||||
The GNX Team
|
||||
|
||||
---
|
||||
GNX Software Solutions
|
||||
Email: {settings.DEFAULT_FROM_EMAIL}
|
||||
"""
|
||||
# Render text email template
|
||||
text_content = render_to_string(
|
||||
'contact/contact_submission_confirmation.txt',
|
||||
context
|
||||
)
|
||||
|
||||
# Create email message
|
||||
email = EmailMultiAlternatives(
|
||||
subject=subject,
|
||||
body=message,
|
||||
body=text_content,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL,
|
||||
to=[submission.email]
|
||||
)
|
||||
|
||||
# Attach HTML version
|
||||
email.attach_alternative(html_content, "text/html")
|
||||
|
||||
# Send email with retry logic
|
||||
success = _send_email_with_retry(email)
|
||||
|
||||
|
||||
@@ -0,0 +1,406 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Thank You for Contacting GNX</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.7;
|
||||
color: #2c3e50;
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
margin: 0;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
|
||||
.email-wrapper {
|
||||
max-width: 650px;
|
||||
margin: 0 auto;
|
||||
background: #ffffff;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #8b5cf6 100%);
|
||||
padding: 50px 40px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.email-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
right: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.15) 0%, transparent 70%);
|
||||
animation: pulse 8s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { transform: scale(1); opacity: 0.5; }
|
||||
50% { transform: scale(1.1); opacity: 0.8; }
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
color: #ffffff;
|
||||
font-size: 32px;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
letter-spacing: -0.5px;
|
||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.email-header .subtitle {
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
font-size: 16px;
|
||||
margin-top: 12px;
|
||||
font-weight: 300;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 50px 40px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.greeting {
|
||||
font-size: 20px;
|
||||
color: #1e293b;
|
||||
margin-bottom: 30px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.intro-text {
|
||||
font-size: 16px;
|
||||
color: #475569;
|
||||
line-height: 1.9;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.thank-you-box {
|
||||
background: linear-gradient(135deg, rgba(102, 126, 234, 0.08) 0%, rgba(102, 126, 234, 0.03) 100%);
|
||||
border: 2px solid rgba(102, 126, 234, 0.2);
|
||||
border-left: 5px solid #667eea;
|
||||
padding: 30px;
|
||||
margin: 35px 0;
|
||||
border-radius: 12px;
|
||||
text-align: center;
|
||||
box-shadow: 0 4px 20px rgba(102, 126, 234, 0.1);
|
||||
}
|
||||
|
||||
.thank-you-box .icon {
|
||||
font-size: 48px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.thank-you-box h2 {
|
||||
color: #1e293b;
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.thank-you-box p {
|
||||
color: #475569;
|
||||
font-size: 15px;
|
||||
line-height: 1.7;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.details-box {
|
||||
background: linear-gradient(135deg, rgba(218, 165, 32, 0.08) 0%, rgba(218, 165, 32, 0.03) 100%);
|
||||
border: 2px solid rgba(218, 165, 32, 0.2);
|
||||
border-left: 5px solid #daa520;
|
||||
padding: 30px;
|
||||
margin: 35px 0;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 20px rgba(218, 165, 32, 0.1);
|
||||
}
|
||||
|
||||
.details-box h3 {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #0f172a;
|
||||
margin-bottom: 25px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 2px solid rgba(218, 165, 32, 0.2);
|
||||
}
|
||||
|
||||
.details-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.details-list li {
|
||||
padding: 15px 0;
|
||||
border-bottom: 1px solid rgba(218, 165, 32, 0.1);
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.details-list li:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.details-list strong {
|
||||
color: #475569;
|
||||
min-width: 140px;
|
||||
font-size: 14px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.details-list span {
|
||||
color: #1e293b;
|
||||
font-size: 15px;
|
||||
font-weight: 500;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.next-steps {
|
||||
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
|
||||
border-left: 4px solid #667eea;
|
||||
padding: 30px;
|
||||
border-radius: 12px;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.next-steps h3 {
|
||||
color: #0f172a;
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
margin-bottom: 15px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.next-steps h3::before {
|
||||
content: '⏰';
|
||||
margin-right: 10px;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.next-steps p {
|
||||
color: #475569;
|
||||
font-size: 15px;
|
||||
line-height: 1.8;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.next-steps p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.contact-info {
|
||||
background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);
|
||||
border-left: 4px solid #3b82f6;
|
||||
padding: 25px;
|
||||
border-radius: 8px;
|
||||
margin-top: 35px;
|
||||
}
|
||||
|
||||
.contact-info strong {
|
||||
color: #1e40af;
|
||||
font-size: 15px;
|
||||
display: block;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-info p {
|
||||
color: #1e3a8a;
|
||||
font-size: 14px;
|
||||
margin: 5px 0;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.closing {
|
||||
margin-top: 40px;
|
||||
font-size: 16px;
|
||||
color: #1e293b;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.closing strong {
|
||||
color: #0f172a;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.email-footer {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
||||
padding: 40px;
|
||||
text-align: center;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
.footer-company {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.footer-tagline {
|
||||
font-size: 14px;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
margin: 25px 0;
|
||||
padding-top: 25px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
color: #daa520;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
margin: 0 15px;
|
||||
}
|
||||
|
||||
.footer-links a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.footer-note {
|
||||
font-size: 12px;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
margin-top: 25px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
body {
|
||||
padding: 20px 10px;
|
||||
}
|
||||
|
||||
.email-header {
|
||||
padding: 40px 25px;
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 35px 25px;
|
||||
}
|
||||
|
||||
.details-list li {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.details-list strong {
|
||||
min-width: auto;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="email-wrapper">
|
||||
<div class="email-header">
|
||||
<h1>Thank You for Contacting Us!</h1>
|
||||
<div class="subtitle">GNX Software Solutions</div>
|
||||
</div>
|
||||
|
||||
<div class="email-body">
|
||||
<div class="greeting">Dear {{ submission.full_name }},</div>
|
||||
|
||||
<div class="intro-text">
|
||||
Thank you for reaching out to GNX Software Solutions! We have received your inquiry and our team is excited to learn more about your project. We appreciate you taking the time to contact us.
|
||||
</div>
|
||||
|
||||
<div class="thank-you-box">
|
||||
<div class="icon">✨</div>
|
||||
<h2>We've Received Your Submission</h2>
|
||||
<p>Your message has been successfully delivered to our team. We'll review your inquiry carefully and get back to you soon.</p>
|
||||
</div>
|
||||
|
||||
<div class="details-box">
|
||||
<h3>Your Submission Details</h3>
|
||||
<ul class="details-list">
|
||||
<li>
|
||||
<strong>Submission ID:</strong>
|
||||
<span>#{{ submission.id }}</span>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Company:</strong>
|
||||
<span>{{ submission.company }}</span>
|
||||
</li>
|
||||
{% if submission.project_type %}
|
||||
<li>
|
||||
<strong>Project Type:</strong>
|
||||
<span>{{ submission.get_project_type_display }}</span>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<strong>Project Type:</strong>
|
||||
<span>Not specified</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if submission.timeline %}
|
||||
<li>
|
||||
<strong>Timeline:</strong>
|
||||
<span>{{ submission.get_timeline_display }}</span>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<strong>Timeline:</strong>
|
||||
<span>Not specified</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="next-steps">
|
||||
<h3>What Happens Next?</h3>
|
||||
<p>Our team will contact you within <strong>24 hours</strong> to discuss your project requirements and how we can help you achieve your goals. We'll review your submission and prepare a tailored response based on your needs.</p>
|
||||
<p>If you have any urgent questions or need immediate assistance, please don't hesitate to contact us directly using the information below.</p>
|
||||
</div>
|
||||
|
||||
<div class="contact-info">
|
||||
<strong>Need Immediate Assistance?</strong>
|
||||
<p>📧 Email: support@gnxsoft.com</p>
|
||||
<p>🌐 Website: <a href="{{ site_url }}" style="color: #1e40af; text-decoration: none;">{{ site_url }}</a></p>
|
||||
</div>
|
||||
|
||||
<div class="closing">
|
||||
We look forward to working with you!<br><br>
|
||||
<strong>Best regards,<br>The GNX Team</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="email-footer">
|
||||
<div class="footer-company">GNX Software Solutions</div>
|
||||
<div class="footer-tagline">Transforming Ideas into Digital Excellence</div>
|
||||
|
||||
<div class="footer-links">
|
||||
<a href="{{ site_url }}">Visit Our Website</a>
|
||||
</div>
|
||||
|
||||
<div class="footer-note">
|
||||
This is an automated confirmation email. Please do not reply directly to this message.<br>
|
||||
For inquiries, please contact us through our website or email.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
THANK YOU FOR CONTACTING GNX SOFTWARE SOLUTIONS
|
||||
================================================
|
||||
|
||||
Dear {{ submission.full_name }},
|
||||
|
||||
Thank you for reaching out to GNX Software Solutions!
|
||||
|
||||
We have received your inquiry about {% if submission.project_type %}{{ submission.get_project_type_display }}{% else %}your project{% endif %} and will review it carefully.
|
||||
|
||||
YOUR SUBMISSION DETAILS:
|
||||
------------------------
|
||||
Submission ID: #{{ submission.id }}
|
||||
Company: {{ submission.company }}
|
||||
Project Type: {% if submission.project_type %}{{ submission.get_project_type_display }}{% else %}Not specified{% endif %}
|
||||
Timeline: {% if submission.timeline %}{{ submission.get_timeline_display }}{% else %}Not specified{% endif %}
|
||||
|
||||
WHAT HAPPENS NEXT?
|
||||
------------------
|
||||
Our team will contact you within 24 hours to discuss your project requirements and how we can help you achieve your goals.
|
||||
|
||||
If you have any urgent questions, please don't hesitate to contact us directly.
|
||||
|
||||
Best regards,
|
||||
The GNX Team
|
||||
|
||||
---
|
||||
GNX Software Solutions
|
||||
Email: support@gnxsoft.com
|
||||
Website: {{ site_url }}
|
||||
|
||||
This is an automated confirmation email. Please do not reply directly to this message.
|
||||
|
||||
@@ -12,106 +12,107 @@
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
line-height: 1.6;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.7;
|
||||
color: #2c3e50;
|
||||
background-color: #f8f9fa;
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
|
||||
.email-container {
|
||||
max-width: 700px;
|
||||
.email-wrapper {
|
||||
max-width: 750px;
|
||||
margin: 0 auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
||||
background: #ffffff;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #8b5cf6 100%);
|
||||
padding: 50px 40px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.header {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
color: white;
|
||||
padding: 40px 30px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.header::before {
|
||||
.email-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: radial-gradient(circle at 20% 80%, rgba(255,255,255,0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 80% 20%, rgba(255,255,255,0.1) 0%, transparent 50%);
|
||||
opacity: 0.3;
|
||||
top: -50%;
|
||||
right: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.15) 0%, transparent 70%);
|
||||
}
|
||||
|
||||
.header-content {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 28px;
|
||||
.email-header h1 {
|
||||
color: #ffffff;
|
||||
font-size: 32px;
|
||||
font-weight: 700;
|
||||
margin-bottom: 8px;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
letter-spacing: -0.5px;
|
||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.header p {
|
||||
.email-header .subtitle {
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
font-size: 16px;
|
||||
opacity: 0.9;
|
||||
margin-top: 12px;
|
||||
font-weight: 300;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.priority-badge {
|
||||
display: inline-block;
|
||||
padding: 8px 16px;
|
||||
border-radius: 20px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
padding: 10px 24px;
|
||||
border-radius: 25px;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
margin-top: 15px;
|
||||
letter-spacing: 1px;
|
||||
margin-top: 20px;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.priority-urgent {
|
||||
background-color: #ff4757;
|
||||
background: linear-gradient(135deg, #ff4757, #ee5a6f);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(255, 71, 87, 0.3);
|
||||
}
|
||||
|
||||
.priority-high {
|
||||
background-color: #ff6b35;
|
||||
background: linear-gradient(135deg, #ff6b35, #ff8c42);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(255, 107, 53, 0.3);
|
||||
}
|
||||
|
||||
.priority-medium {
|
||||
background-color: #ffa726;
|
||||
background: linear-gradient(135deg, #ffa726, #ffb74d);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(255, 167, 38, 0.3);
|
||||
}
|
||||
|
||||
.priority-low {
|
||||
background-color: #66bb6a;
|
||||
background: linear-gradient(135deg, #66bb6a, #81c784);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(102, 187, 106, 0.3);
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 40px 30px;
|
||||
.email-body {
|
||||
padding: 50px 40px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 30px;
|
||||
background-color: #ffffff;
|
||||
margin-bottom: 35px;
|
||||
background: #ffffff;
|
||||
border-radius: 12px;
|
||||
border: 1px solid #e9ecef;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
@@ -121,14 +122,14 @@
|
||||
}
|
||||
|
||||
.section-header {
|
||||
background: linear-gradient(90deg, #f8f9fa 0%, #e9ecef 100%);
|
||||
padding: 20px 25px;
|
||||
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
|
||||
padding: 22px 28px;
|
||||
border-bottom: 1px solid #dee2e6;
|
||||
}
|
||||
|
||||
.section h3 {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
font-weight: 700;
|
||||
color: #2c3e50;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
@@ -136,18 +137,18 @@
|
||||
}
|
||||
|
||||
.section-icon {
|
||||
font-size: 20px;
|
||||
font-size: 22px;
|
||||
margin-right: 12px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.section-body {
|
||||
padding: 25px;
|
||||
padding: 28px;
|
||||
}
|
||||
|
||||
.field {
|
||||
margin-bottom: 18px;
|
||||
margin-bottom: 20px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: flex-start;
|
||||
@@ -158,39 +159,55 @@
|
||||
}
|
||||
|
||||
.field-label {
|
||||
font-weight: 600;
|
||||
font-weight: 700;
|
||||
color: #495057;
|
||||
min-width: 140px;
|
||||
margin-bottom: 5px;
|
||||
min-width: 160px;
|
||||
margin-bottom: 8px;
|
||||
font-size: 14px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.field-value {
|
||||
flex: 1;
|
||||
color: #2c3e50;
|
||||
font-size: 15px;
|
||||
line-height: 1.5;
|
||||
line-height: 1.7;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.field-value a {
|
||||
color: #667eea;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.field-value a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.message-content {
|
||||
background-color: #f8f9fa;
|
||||
background: linear-gradient(135deg, #f8f9fa 0%, #f1f5f9 100%);
|
||||
border: 1px solid #e9ecef;
|
||||
border-left: 4px solid #daa520;
|
||||
border-radius: 8px;
|
||||
padding: 20px;
|
||||
margin-top: 10px;
|
||||
font-style: italic;
|
||||
line-height: 1.6;
|
||||
padding: 25px;
|
||||
margin-top: 12px;
|
||||
font-style: normal;
|
||||
line-height: 1.8;
|
||||
white-space: pre-wrap;
|
||||
color: #334155;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%);
|
||||
color: white;
|
||||
padding: 30px;
|
||||
.email-footer {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
||||
padding: 40px;
|
||||
text-align: center;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.footer::before {
|
||||
.email-footer::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
@@ -200,47 +217,58 @@
|
||||
background: linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.3) 50%, transparent 100%);
|
||||
}
|
||||
|
||||
.footer p {
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
opacity: 0.9;
|
||||
.footer-company {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.footer p:last-child {
|
||||
margin-bottom: 0;
|
||||
font-size: 12px;
|
||||
opacity: 0.7;
|
||||
.footer-tagline {
|
||||
font-size: 14px;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.footer-note {
|
||||
font-size: 13px;
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.company-info {
|
||||
margin-top: 20px;
|
||||
padding-top: 20px;
|
||||
margin-top: 25px;
|
||||
padding-top: 25px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.company-info strong {
|
||||
color: #ecf0f1;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.company-info p {
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
font-size: 13px;
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
body {
|
||||
padding: 10px;
|
||||
padding: 20px 10px;
|
||||
}
|
||||
|
||||
.email-container {
|
||||
border-radius: 8px;
|
||||
.email-header {
|
||||
padding: 40px 25px;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 30px 20px;
|
||||
.email-header h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 30px 20px;
|
||||
.email-body {
|
||||
padding: 35px 25px;
|
||||
}
|
||||
|
||||
.section-body {
|
||||
@@ -259,18 +287,16 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="email-container">
|
||||
<div class="header">
|
||||
<div class="header-content">
|
||||
<div class="email-wrapper">
|
||||
<div class="email-header">
|
||||
<h1>📧 New Contact Form Submission</h1>
|
||||
<p>GNX Software Solutions</p>
|
||||
<div class="subtitle">GNX Software Solutions</div>
|
||||
<div class="priority-badge priority-{{ submission.priority }}">
|
||||
{{ submission.get_priority_display }} Priority
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="email-body">
|
||||
<div class="section">
|
||||
<div class="section-header">
|
||||
<h3>
|
||||
@@ -286,7 +312,7 @@
|
||||
<div class="field">
|
||||
<span class="field-label">Priority:</span>
|
||||
<span class="field-value">
|
||||
<span class="priority-badge priority-{{ submission.priority }}" style="font-size: 11px; padding: 4px 8px;">
|
||||
<span class="priority-badge priority-{{ submission.priority }}" style="font-size: 11px; padding: 6px 12px;">
|
||||
{{ submission.get_priority_display }}
|
||||
</span>
|
||||
</span>
|
||||
@@ -317,14 +343,14 @@
|
||||
<div class="field">
|
||||
<span class="field-label">Email:</span>
|
||||
<span class="field-value">
|
||||
<a href="mailto:{{ submission.email }}" style="color: #667eea; text-decoration: none;">{{ submission.email }}</a>
|
||||
<a href="mailto:{{ submission.email }}">{{ submission.email }}</a>
|
||||
</span>
|
||||
</div>
|
||||
{% if submission.phone %}
|
||||
<div class="field">
|
||||
<span class="field-label">Phone:</span>
|
||||
<span class="field-value">
|
||||
<a href="tel:{{ submission.phone }}" style="color: #667eea; text-decoration: none;">{{ submission.phone }}</a>
|
||||
<a href="tel:{{ submission.phone }}">{{ submission.phone }}</a>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -423,9 +449,14 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>📧 This email was automatically generated from the GNX website contact form.</p>
|
||||
<p>⏰ Please respond to the customer within 24 hours as per our service commitment.</p>
|
||||
<div class="email-footer">
|
||||
<div class="footer-company">GNX Software Solutions</div>
|
||||
<div class="footer-tagline">Contact Form Notification</div>
|
||||
|
||||
<div class="footer-note">
|
||||
📧 This email was automatically generated from the GNX website contact form.<br>
|
||||
⏰ Please respond to the customer within 24 hours as per our service commitment.
|
||||
</div>
|
||||
|
||||
<div class="company-info">
|
||||
<p><strong>GNX Software Solutions</strong></p>
|
||||
|
||||
@@ -47,6 +47,7 @@ INSTALLED_APPS = [
|
||||
'drf_yasg',
|
||||
|
||||
# Local apps
|
||||
'home',
|
||||
'contact',
|
||||
'services',
|
||||
'about',
|
||||
|
||||
@@ -46,6 +46,7 @@ urlpatterns = [
|
||||
|
||||
# API Root - All API endpoints under /api/
|
||||
path('api/', include([
|
||||
path('home/', include('home.urls')),
|
||||
path('contact/', include('contact.urls')),
|
||||
path('services/', include('services.urls')),
|
||||
path('about/', include('about.urls')),
|
||||
|
||||
0
backEnd/home/__init__.py
Normal file
BIN
backEnd/home/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
backEnd/home/__pycache__/admin.cpython-312.pyc
Normal file
BIN
backEnd/home/__pycache__/apps.cpython-312.pyc
Normal file
BIN
backEnd/home/__pycache__/models.cpython-312.pyc
Normal file
BIN
backEnd/home/__pycache__/serializers.cpython-312.pyc
Normal file
BIN
backEnd/home/__pycache__/urls.cpython-312.pyc
Normal file
BIN
backEnd/home/__pycache__/views.cpython-312.pyc
Normal file
28
backEnd/home/admin.py
Normal file
@@ -0,0 +1,28 @@
|
||||
from django.contrib import admin
|
||||
from .models import HomeBanner
|
||||
|
||||
|
||||
@admin.register(HomeBanner)
|
||||
class HomeBannerAdmin(admin.ModelAdmin):
|
||||
list_display = ['heading', 'highlight', 'badge', 'display_order', 'is_active', 'created_at']
|
||||
list_filter = ['is_active', 'created_at']
|
||||
search_fields = ['heading', 'highlight', 'badge', 'description']
|
||||
ordering = ['display_order', 'created_at']
|
||||
readonly_fields = ['created_at', 'updated_at']
|
||||
|
||||
fieldsets = (
|
||||
('Content', {
|
||||
'fields': ('icon', 'badge', 'heading', 'highlight', 'subheading', 'description')
|
||||
}),
|
||||
('Call to Action', {
|
||||
'fields': ('button_text', 'button_url')
|
||||
}),
|
||||
('Settings', {
|
||||
'fields': ('display_order', 'is_active')
|
||||
}),
|
||||
('Timestamps', {
|
||||
'fields': ('created_at', 'updated_at'),
|
||||
'classes': ('collapse',)
|
||||
}),
|
||||
)
|
||||
|
||||
8
backEnd/home/apps.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class HomeConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'home'
|
||||
verbose_name = 'Home'
|
||||
|
||||
0
backEnd/home/management/__init__.py
Normal file
BIN
backEnd/home/management/__pycache__/__init__.cpython-312.pyc
Normal file
0
backEnd/home/management/commands/__init__.py
Normal file
86
backEnd/home/management/commands/populate_home_banners.py
Normal file
@@ -0,0 +1,86 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from home.models import HomeBanner
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Populate database with sample homepage banner data'
|
||||
|
||||
def handle(self, *args, **options):
|
||||
self.stdout.write(self.style.SUCCESS('Starting to populate homepage banner data...'))
|
||||
|
||||
# Clear existing data
|
||||
HomeBanner.objects.all().delete()
|
||||
|
||||
# Create Homepage Banners
|
||||
banners_data = [
|
||||
{
|
||||
'icon': 'fa-solid fa-rocket',
|
||||
'badge': 'Enterprise Software Solutions',
|
||||
'heading': 'Transform Your Business with',
|
||||
'highlight': 'Enterprise-Grade Technology',
|
||||
'subheading': 'Scalable, Secure, and Compliant Software Solutions',
|
||||
'description': 'GNX Soft delivers cutting-edge enterprise software solutions for mission-critical industries. We empower organizations in Defense & Aerospace, Healthcare, Banking, and more with innovative, secure, and scalable platforms that drive digital transformation.',
|
||||
'button_text': 'Explore Our Solutions',
|
||||
'button_url': '/services',
|
||||
'display_order': 1,
|
||||
'is_active': True
|
||||
},
|
||||
{
|
||||
'icon': 'fa-solid fa-shield-halved',
|
||||
'badge': 'Secure & Compliant',
|
||||
'heading': 'Defense-Grade Security for',
|
||||
'highlight': 'Mission-Critical Operations',
|
||||
'subheading': 'HIPAA, GDPR, and Industry Compliance Guaranteed',
|
||||
'description': 'Our enterprise solutions are built with security-first principles, ensuring HIPAA compliance for healthcare, GDPR adherence for EU operations, and defense-grade security for critical infrastructure. Trust GNX Soft for your most sensitive projects.',
|
||||
'button_text': 'View Case Studies',
|
||||
'button_url': '/case-studies',
|
||||
'display_order': 2,
|
||||
'is_active': True
|
||||
},
|
||||
{
|
||||
'icon': 'fa-solid fa-cloud',
|
||||
'badge': 'Cloud-Native Architecture',
|
||||
'heading': 'Scalable Infrastructure for',
|
||||
'highlight': 'Global Enterprise Operations',
|
||||
'subheading': 'EU-Based Infrastructure with 99.9% Uptime SLA',
|
||||
'description': 'Deploy on our EU-based cloud infrastructure across Bulgaria, Germany, and Netherlands. Experience enterprise-grade scalability, reliability, and performance with 24/7 monitoring and support. Perfect for organizations requiring data sovereignty and regulatory compliance.',
|
||||
'button_text': 'Contact Sales',
|
||||
'button_url': '/contact-us',
|
||||
'display_order': 3,
|
||||
'is_active': True
|
||||
},
|
||||
{
|
||||
'icon': 'fa-solid fa-code',
|
||||
'badge': 'Full-Stack Development',
|
||||
'heading': 'Expert Development Teams for',
|
||||
'highlight': 'Complex Enterprise Projects',
|
||||
'subheading': 'Java, Python, React, Angular, and Modern Tech Stack',
|
||||
'description': 'Our expert development teams specialize in enterprise software development using Java Spring Boot, Python FastAPI/Django, React, Angular, and modern cloud technologies. From microservices architecture to legacy system modernization, we deliver excellence.',
|
||||
'button_text': 'Learn More',
|
||||
'button_url': '/about',
|
||||
'display_order': 4,
|
||||
'is_active': True
|
||||
},
|
||||
{
|
||||
'icon': 'fa-solid fa-users',
|
||||
'badge': 'Trusted by Industry Leaders',
|
||||
'heading': 'Partner with GNX Soft for',
|
||||
'highlight': 'Digital Transformation Success',
|
||||
'subheading': '30+ Enterprise Clients | 8 Industry Verticals | 24/7 Support',
|
||||
'description': 'Join leading organizations across Defense & Aerospace, Healthcare & Medical, Banking & Finance, Telecommunications, Public Sector, E-commerce, Food & Beverages, and Oil & Energy. Experience the GNX Soft difference with dedicated enterprise support and proven methodologies.',
|
||||
'button_text': 'Get Started',
|
||||
'button_url': '/contact-us',
|
||||
'display_order': 5,
|
||||
'is_active': True
|
||||
}
|
||||
]
|
||||
|
||||
created_banners = []
|
||||
for banner_data in banners_data:
|
||||
banner = HomeBanner.objects.create(**banner_data)
|
||||
created_banners.append(banner)
|
||||
self.stdout.write(f'Created banner: {banner.heading} - {banner.highlight}')
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('\nSuccessfully populated homepage banner data!'))
|
||||
self.stdout.write(f'Created {HomeBanner.objects.count()} homepage banners')
|
||||
|
||||
37
backEnd/home/migrations/0001_initial.py
Normal file
@@ -0,0 +1,37 @@
|
||||
# Generated by Django 5.2.8 on 2025-11-24 04:24
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='HomeBanner',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('icon', models.CharField(help_text="Badge icon class (e.g., 'fa-solid fa-building')", max_length=50)),
|
||||
('badge', models.CharField(help_text='Badge text', max_length=100)),
|
||||
('heading', models.CharField(help_text='Main heading text', max_length=200)),
|
||||
('highlight', models.CharField(blank=True, help_text='Highlighted text (gradient text)', max_length=100)),
|
||||
('subheading', models.CharField(blank=True, help_text='Subheading text', max_length=200)),
|
||||
('description', models.TextField(help_text='Banner description')),
|
||||
('button_text', models.CharField(default='Learn More', help_text='Primary CTA button text', max_length=100)),
|
||||
('button_url', models.CharField(default='#', help_text='Primary CTA button URL', max_length=200)),
|
||||
('display_order', models.PositiveIntegerField(default=0, help_text='Order for displaying banners in carousel')),
|
||||
('is_active', models.BooleanField(default=True, help_text='Whether this banner is active')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Home Banner',
|
||||
'verbose_name_plural': 'Home Banners',
|
||||
'ordering': ['display_order', 'created_at'],
|
||||
},
|
||||
),
|
||||
]
|
||||
0
backEnd/home/migrations/__init__.py
Normal file
BIN
backEnd/home/migrations/__pycache__/0001_initial.cpython-312.pyc
Normal file
BIN
backEnd/home/migrations/__pycache__/__init__.cpython-312.pyc
Normal file
27
backEnd/home/models.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
class HomeBanner(models.Model):
|
||||
"""Model for Homepage banner section"""
|
||||
icon = models.CharField(max_length=50, help_text="Badge icon class (e.g., 'fa-solid fa-building')")
|
||||
badge = models.CharField(max_length=100, help_text="Badge text")
|
||||
heading = models.CharField(max_length=200, help_text="Main heading text")
|
||||
highlight = models.CharField(max_length=100, blank=True, help_text="Highlighted text (gradient text)")
|
||||
subheading = models.CharField(max_length=200, blank=True, help_text="Subheading text")
|
||||
description = models.TextField(help_text="Banner description")
|
||||
button_text = models.CharField(max_length=100, default="Learn More", help_text="Primary CTA button text")
|
||||
button_url = models.CharField(max_length=200, default="#", help_text="Primary CTA button URL")
|
||||
display_order = models.PositiveIntegerField(default=0, help_text="Order for displaying banners in carousel")
|
||||
is_active = models.BooleanField(default=True, help_text="Whether this banner is active")
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Home Banner"
|
||||
verbose_name_plural = "Home Banners"
|
||||
ordering = ['display_order', 'created_at']
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.heading} - {self.badge}"
|
||||
|
||||
13
backEnd/home/serializers.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from rest_framework import serializers
|
||||
from .models import HomeBanner
|
||||
|
||||
|
||||
class HomeBannerSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = HomeBanner
|
||||
fields = [
|
||||
'id', 'icon', 'badge', 'heading', 'highlight', 'subheading',
|
||||
'description', 'button_text', 'button_url', 'display_order',
|
||||
'is_active', 'created_at', 'updated_at'
|
||||
]
|
||||
|
||||
11
backEnd/home/urls.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
|
||||
app_name = 'home'
|
||||
|
||||
urlpatterns = [
|
||||
# Banner endpoints
|
||||
path('banner/', views.HomeBannerListAPIView.as_view(), name='home-banner-list'),
|
||||
path('banner/<int:pk>/', views.HomeBannerDetailAPIView.as_view(), name='home-banner-detail'),
|
||||
]
|
||||
|
||||
19
backEnd/home/views.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from rest_framework import generics
|
||||
from rest_framework.permissions import AllowAny
|
||||
from .models import HomeBanner
|
||||
from .serializers import HomeBannerSerializer
|
||||
|
||||
|
||||
class HomeBannerListAPIView(generics.ListAPIView):
|
||||
"""API view to get all active home banners"""
|
||||
queryset = HomeBanner.objects.filter(is_active=True).order_by('display_order', 'created_at')
|
||||
serializer_class = HomeBannerSerializer
|
||||
permission_classes = [AllowAny]
|
||||
|
||||
|
||||
class HomeBannerDetailAPIView(generics.RetrieveAPIView):
|
||||
"""API view to get a specific home banner"""
|
||||
queryset = HomeBanner.objects.filter(is_active=True)
|
||||
serializer_class = HomeBannerSerializer
|
||||
permission_classes = [AllowAny]
|
||||
|
||||
BIN
backEnd/media/services/images/ai.jpg
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
backEnd/media/services/images/api-integrations.jpg
Normal file
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 85 KiB |
BIN
backEnd/media/services/images/backend-engineering_jdxflin.jpg
Normal file
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 237 KiB |
BIN
backEnd/media/services/images/devops-services.jpg
Normal file
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 197 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 143 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 165 KiB |
BIN
backEnd/media/services/images/frontend-engineering_vbwN78Z.jpg
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
backEnd/media/services/images/infrastructure-support.jpg
Normal file
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 90 KiB |
BIN
backEnd/media/services/images/replication-of-data.jpg
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
backEnd/media/services/images/servers-service.jpg
Normal file
|
After Width: | Height: | Size: 108 KiB |
@@ -39,15 +39,16 @@ class Command(BaseCommand):
|
||||
help='Update existing services instead of skipping them',
|
||||
)
|
||||
|
||||
def download_image_from_unsplash(self, keyword, width=1200, height=800, api_key=None):
|
||||
def download_image_from_unsplash(self, keyword, width=1200, height=800, api_key=None, photo_id=None):
|
||||
"""
|
||||
Download an image from Unsplash based on keyword.
|
||||
Download an image from Unsplash based on keyword or photo ID.
|
||||
|
||||
Args:
|
||||
keyword: Search keyword for the image
|
||||
width: Image width in pixels
|
||||
height: Image height in pixels
|
||||
api_key: Optional Unsplash API access key
|
||||
photo_id: Optional specific Unsplash photo ID
|
||||
|
||||
Returns:
|
||||
BytesIO object containing the image data, or None if download fails
|
||||
@@ -55,6 +56,16 @@ class Command(BaseCommand):
|
||||
try:
|
||||
if api_key:
|
||||
# Use Unsplash API (requires API key)
|
||||
if photo_id:
|
||||
# Get specific photo by ID
|
||||
url = f"https://api.unsplash.com/photos/{photo_id}"
|
||||
req = urllib.request.Request(url)
|
||||
req.add_header('Authorization', f'Client-ID {api_key}')
|
||||
with urllib.request.urlopen(req, timeout=30) as response:
|
||||
data = json.loads(response.read().decode())
|
||||
image_url = data['urls']['regular']
|
||||
else:
|
||||
# Get random photo by keyword
|
||||
url = "https://api.unsplash.com/photos/random"
|
||||
params = {
|
||||
'query': keyword,
|
||||
@@ -71,11 +82,11 @@ class Command(BaseCommand):
|
||||
data = json.loads(response.read().decode())
|
||||
image_url = data['urls']['regular']
|
||||
else:
|
||||
# Use Unsplash's direct image service (no key required)
|
||||
# Using a curated collection of enterprise/business images
|
||||
# For better results with specific keywords, use --unsplash-key option
|
||||
# Using placeholder service that provides high-quality images
|
||||
image_url = f"https://images.unsplash.com/photo-1552664730-d307ca884978?w={width}&h={height}&fit=crop"
|
||||
# Use Picsum Photos (Lorem Picsum) for reliable, unique images (no key required)
|
||||
# Create a unique seed based on keyword hash to get different images for each service
|
||||
keyword_hash = abs(hash(keyword)) % 1000
|
||||
# Picsum Photos provides random images with seeds - each seed gives a unique image
|
||||
image_url = f"https://picsum.photos/seed/{keyword_hash}/{width}/{height}"
|
||||
|
||||
# Download the actual image
|
||||
req = urllib.request.Request(image_url)
|
||||
@@ -100,39 +111,40 @@ class Command(BaseCommand):
|
||||
self.stdout.write(self.style.SUCCESS('Starting enterprise data import...'))
|
||||
|
||||
with transaction.atomic():
|
||||
# Delete all existing services (this will cascade delete features and expertise items)
|
||||
deleted_count = Service.objects.count()
|
||||
Service.objects.all().delete()
|
||||
self.stdout.write(
|
||||
self.style.WARNING(f'Deleted {deleted_count} existing service(s)')
|
||||
)
|
||||
|
||||
# Create or get categories
|
||||
categories = {}
|
||||
category_data = [
|
||||
{
|
||||
'slug': 'web-development',
|
||||
'name': 'Web Development',
|
||||
'description': 'Custom web applications and enterprise websites',
|
||||
'slug': 'development',
|
||||
'name': 'Development',
|
||||
'description': 'Software development services',
|
||||
'display_order': 1,
|
||||
},
|
||||
{
|
||||
'slug': 'mobile-development',
|
||||
'name': 'Mobile Development',
|
||||
'description': 'Native and cross-platform mobile applications',
|
||||
'slug': 'infrastructure',
|
||||
'name': 'Infrastructure',
|
||||
'description': 'Infrastructure and DevOps services',
|
||||
'display_order': 2,
|
||||
},
|
||||
{
|
||||
'slug': 'api-development',
|
||||
'name': 'API Development',
|
||||
'description': 'RESTful APIs and microservices architecture',
|
||||
'slug': 'integration',
|
||||
'name': 'Integration',
|
||||
'description': 'API and data integration services',
|
||||
'display_order': 3,
|
||||
},
|
||||
{
|
||||
'slug': 'cloud-services',
|
||||
'name': 'Cloud Services',
|
||||
'description': 'Cloud migration and infrastructure services',
|
||||
'slug': 'ai-services',
|
||||
'name': 'AI Services',
|
||||
'description': 'Artificial Intelligence and machine learning services',
|
||||
'display_order': 4,
|
||||
},
|
||||
{
|
||||
'slug': 'enterprise-solutions',
|
||||
'name': 'Enterprise Solutions',
|
||||
'description': 'Enterprise-grade software solutions',
|
||||
'display_order': 5,
|
||||
},
|
||||
]
|
||||
|
||||
for cat_data in category_data:
|
||||
@@ -146,146 +158,199 @@ class Command(BaseCommand):
|
||||
self.style.SUCCESS(f'Created category: {category.name}')
|
||||
)
|
||||
|
||||
# Enterprise services data
|
||||
# New services data
|
||||
services_data = [
|
||||
{
|
||||
'title': 'Enterprise Web Application Development',
|
||||
'description': 'Build powerful, scalable enterprise web applications tailored to your business needs. Our expert developers use modern frameworks and technologies to create solutions that drive growth, efficiency, and competitive advantage. We deliver robust applications that handle high traffic, complex business logic, and integrate seamlessly with your existing systems.',
|
||||
'short_description': 'Scalable enterprise web applications built with cutting-edge technologies for optimal performance and reliability.',
|
||||
'slug': 'enterprise-web-application-development',
|
||||
'icon': 'code',
|
||||
'title': 'Enterprise Backend Development Services',
|
||||
'description': 'Expert backend engineering services to build robust, scalable server-side applications. We design and develop high-performance APIs, microservices, and database architectures that power your applications. Our backend solutions ensure reliability, security, and optimal performance for enterprise-scale systems.',
|
||||
'short_description': 'Robust backend engineering services for scalable server-side applications and APIs.',
|
||||
'slug': 'enterprise-backend-development-services',
|
||||
'icon': 'server',
|
||||
'price': '25000.00',
|
||||
'category_slug': 'web-development',
|
||||
'duration': '12-24 weeks',
|
||||
'deliverables': 'Enterprise Web Application, Admin Dashboard, User Management System, Role-Based Access Control, Database Design & Optimization, API Integration, Third-party Service Integration, Automated Testing Suite, CI/CD Pipeline, Documentation, Training & Support',
|
||||
'technologies': 'React, Next.js, TypeScript, Node.js, PostgreSQL, Redis, AWS, Docker, Kubernetes, GraphQL, Microservices Architecture',
|
||||
'process_steps': 'Requirements Analysis & Planning, System Architecture Design, Development Sprint Planning, Agile Development, Code Review & Quality Assurance, Testing & QA, Deployment & DevOps, Training & Knowledge Transfer, Ongoing Support',
|
||||
'features_description': 'Our enterprise web applications come with advanced features including real-time collaboration, advanced analytics, comprehensive reporting, automated workflows, and seamless third-party integrations.',
|
||||
'deliverables_description': 'You will receive a fully functional enterprise web application with comprehensive documentation, deployment scripts, testing suite, and ongoing support for maintenance and updates.',
|
||||
'process_description': 'We follow an agile development methodology with regular sprints, continuous integration, and transparent communication throughout the project lifecycle.',
|
||||
'why_choose_description': 'Choose us for our proven track record in enterprise development, deep technical expertise, commitment to quality, and dedication to delivering solutions that exceed expectations.',
|
||||
'expertise_description': 'Our team brings years of experience in enterprise software development, with expertise in modern frameworks, cloud technologies, and best practices for scalable applications.',
|
||||
'image_keyword': 'enterprise web development business technology',
|
||||
'category_slug': 'development',
|
||||
'duration': '8-16 weeks',
|
||||
'deliverables': 'Backend API Development, Database Design & Optimization, Microservices Architecture, Authentication & Authorization, API Documentation, Testing Suite, Deployment Configuration, Performance Optimization, Security Implementation, Documentation',
|
||||
'technologies': 'Node.js, Python, Django, FastAPI, PostgreSQL, MongoDB, Redis, GraphQL, REST APIs, Docker, Kubernetes, AWS, Microservices',
|
||||
'process_steps': 'Requirements Analysis, Architecture Design, Database Design, API Development, Testing & QA, Security Audit, Deployment, Documentation, Training, Ongoing Support',
|
||||
'features_description': 'Enterprise-grade backend solutions with scalable architecture, secure authentication, optimized database performance, and comprehensive API documentation.',
|
||||
'deliverables_description': 'Complete backend infrastructure with APIs, databases, authentication systems, and comprehensive documentation for seamless integration.',
|
||||
'process_description': 'We follow agile development practices with iterative development, continuous testing, and regular code reviews to ensure quality.',
|
||||
'why_choose_description': 'Our backend engineering expertise ensures your applications are built on solid foundations with scalability, security, and performance in mind.',
|
||||
'expertise_description': 'Experienced backend engineers with deep knowledge of modern frameworks, database optimization, and cloud-native architectures.',
|
||||
'image_keyword': 'server backend code programming database',
|
||||
'unsplash_photo_id': '1558497419-80c43fea0fbe', # Backend/server technology
|
||||
'featured': True,
|
||||
'display_order': 1,
|
||||
'is_active': True,
|
||||
},
|
||||
{
|
||||
'title': 'Enterprise Mobile App Development',
|
||||
'description': 'Create stunning, high-performance mobile applications for iOS and Android platforms. We deliver native and cross-platform solutions that provide exceptional user experiences, drive engagement, and scale with your business. Our mobile apps are built with enterprise-grade security, offline capabilities, and seamless backend integration.',
|
||||
'short_description': 'Enterprise mobile applications for iOS and Android with native performance and advanced features.',
|
||||
'slug': 'enterprise-mobile-app-development',
|
||||
'icon': 'mobile',
|
||||
'price': '35000.00',
|
||||
'category_slug': 'mobile-development',
|
||||
'duration': '16-32 weeks',
|
||||
'deliverables': 'Native Mobile Applications (iOS & Android), Cross-platform App (React Native/Flutter), App Store Deployment, Enterprise App Distribution, Push Notification System, Offline Support & Sync, Analytics Integration, Crash Reporting, Performance Monitoring, Security Implementation, Testing Suite, Documentation',
|
||||
'technologies': 'React Native, Flutter, Swift, Kotlin, Firebase, AWS Amplify, App Store Connect, Google Play Console, Fastlane, CodePush',
|
||||
'process_steps': 'Discovery & Planning, UI/UX Design, Architecture Design, Development Sprints, Testing & QA, Beta Testing, App Store Submission, Launch & Marketing Support, Post-Launch Support',
|
||||
'features_description': 'Enterprise mobile apps with features like biometric authentication, offline-first architecture, real-time synchronization, advanced analytics, push notifications, and enterprise security compliance.',
|
||||
'deliverables_description': 'Complete mobile application solution including source code, deployment to app stores, enterprise distribution setup, analytics dashboard, and comprehensive documentation.',
|
||||
'process_description': 'We use agile methodologies with continuous testing, regular stakeholder reviews, and iterative improvements based on user feedback.',
|
||||
'why_choose_description': 'Our mobile development expertise, combined with enterprise-grade practices, ensures your app performs flawlessly, scales efficiently, and provides exceptional user experiences.',
|
||||
'expertise_description': 'Specialized in both native and cross-platform development, with deep knowledge of mobile architecture patterns, performance optimization, and platform-specific best practices.',
|
||||
'image_keyword': 'enterprise mobile app development smartphone business',
|
||||
'title': 'Enterprise Frontend Development Services',
|
||||
'description': 'Create stunning, responsive user interfaces with our frontend engineering services. We build modern, performant web applications using the latest frameworks and technologies. Our frontend solutions deliver exceptional user experiences across all devices and platforms.',
|
||||
'short_description': 'Modern frontend engineering services for responsive and performant web applications.',
|
||||
'slug': 'enterprise-frontend-development-services',
|
||||
'icon': 'code',
|
||||
'price': '22000.00',
|
||||
'category_slug': 'development',
|
||||
'duration': '8-16 weeks',
|
||||
'deliverables': 'Responsive Web Application, Component Library, State Management, API Integration, Performance Optimization, Cross-browser Compatibility, Accessibility Implementation, Testing Suite, Build Configuration, Documentation',
|
||||
'technologies': 'React, Next.js, Vue.js, TypeScript, JavaScript, HTML5, CSS3, Tailwind CSS, Redux, GraphQL, Webpack, Vite',
|
||||
'process_steps': 'UI/UX Design Review, Component Architecture, Development, State Management, API Integration, Testing, Performance Optimization, Browser Testing, Deployment, Documentation',
|
||||
'features_description': 'Modern frontend applications with responsive design, optimized performance, accessibility compliance, and seamless user experiences.',
|
||||
'deliverables_description': 'Complete frontend application with reusable components, optimized performance, and comprehensive documentation for maintenance.',
|
||||
'process_description': 'We use modern development practices with component-based architecture, automated testing, and continuous integration.',
|
||||
'why_choose_description': 'Our frontend engineering expertise ensures your applications are fast, accessible, and provide exceptional user experiences.',
|
||||
'expertise_description': 'Skilled frontend developers with expertise in modern frameworks, performance optimization, and user experience design.',
|
||||
'image_keyword': 'web design user interface frontend development',
|
||||
'unsplash_photo_id': '1460925895917-afdab827c52f', # Web design/UI
|
||||
'featured': True,
|
||||
'display_order': 2,
|
||||
'is_active': True,
|
||||
},
|
||||
{
|
||||
'title': 'Enterprise API Development & Integration',
|
||||
'description': 'Build robust, scalable APIs that power your applications and enable seamless integration with third-party services. Our APIs are designed for performance, security, maintainability, and enterprise-scale usage. We create comprehensive API ecosystems that support microservices architecture and enable digital transformation.',
|
||||
'short_description': 'Enterprise-grade RESTful APIs and microservices for seamless system integration and digital transformation.',
|
||||
'slug': 'enterprise-api-development-integration',
|
||||
'icon': 'api',
|
||||
'price': '20000.00',
|
||||
'category_slug': 'api-development',
|
||||
'duration': '8-16 weeks',
|
||||
'deliverables': 'RESTful API Suite, GraphQL API (optional), API Gateway Configuration, Authentication & Authorization System, Rate Limiting & Throttling, API Documentation (OpenAPI/Swagger), SDK Development, Integration Testing Suite, Monitoring & Analytics, API Versioning Strategy, Developer Portal, Support & Maintenance',
|
||||
'technologies': 'Node.js, Python, FastAPI, Django REST Framework, PostgreSQL, MongoDB, Redis, AWS API Gateway, Kong, Apigee, GraphQL, WebSockets, OAuth 2.0, JWT',
|
||||
'process_steps': 'API Planning & Design, Architecture Design, Development & Implementation, Documentation, Testing & QA, Security Audit, Deployment, Integration Support, Monitoring Setup, Ongoing Maintenance',
|
||||
'features_description': 'Enterprise APIs with advanced features including OAuth 2.0 authentication, rate limiting, request/response caching, webhook support, comprehensive logging, and real-time monitoring.',
|
||||
'deliverables_description': 'Complete API solution with comprehensive documentation, SDKs for multiple languages, developer portal, testing tools, and integration support.',
|
||||
'process_description': 'We follow API-first design principles with thorough documentation, versioning strategies, and comprehensive testing throughout the development lifecycle.',
|
||||
'why_choose_description': 'Our API development expertise ensures your APIs are secure, performant, well-documented, and designed for long-term maintainability and scalability.',
|
||||
'expertise_description': 'Deep expertise in API design patterns, microservices architecture, security best practices, and integration with enterprise systems.',
|
||||
'image_keyword': 'api development integration enterprise technology',
|
||||
'featured': True,
|
||||
'title': 'Enterprise Data Replication & Synchronization Services',
|
||||
'description': 'Comprehensive data replication services to ensure data consistency, availability, and disaster recovery. We implement robust data replication strategies across multiple systems and locations, ensuring your data is always available and synchronized.',
|
||||
'short_description': 'Reliable data replication services for data consistency and disaster recovery.',
|
||||
'slug': 'enterprise-data-replication-synchronization-services',
|
||||
'icon': 'database',
|
||||
'price': '18000.00',
|
||||
'category_slug': 'infrastructure',
|
||||
'duration': '4-8 weeks',
|
||||
'deliverables': 'Data Replication Strategy, Replication Setup, Monitoring & Alerting, Disaster Recovery Plan, Data Synchronization, Backup Systems, Documentation, Training, Ongoing Support',
|
||||
'technologies': 'PostgreSQL, MySQL, MongoDB, Redis, AWS RDS, Azure SQL, Data Sync Tools, ETL Pipelines, Change Data Capture',
|
||||
'process_steps': 'Data Assessment, Replication Strategy, Setup & Configuration, Testing, Monitoring Setup, Disaster Recovery Planning, Documentation, Training, Go-Live, Ongoing Support',
|
||||
'features_description': 'Robust data replication with real-time synchronization, automated failover, monitoring, and comprehensive disaster recovery capabilities.',
|
||||
'deliverables_description': 'Complete data replication solution with monitoring, backup systems, and disaster recovery plans for business continuity.',
|
||||
'process_description': 'We implement data replication with careful planning, thorough testing, and continuous monitoring to ensure reliability.',
|
||||
'why_choose_description': 'Our data replication expertise ensures your data is always available, synchronized, and protected against data loss.',
|
||||
'expertise_description': 'Data engineers with extensive experience in database replication, data synchronization, and disaster recovery solutions.',
|
||||
'image_keyword': 'database data center server backup storage',
|
||||
'unsplash_photo_id': '1557804506-2a27b1fb0947', # Database/data center
|
||||
'featured': False,
|
||||
'display_order': 3,
|
||||
'is_active': True,
|
||||
},
|
||||
{
|
||||
'title': 'Enterprise Cloud Migration Services',
|
||||
'description': 'Migrate your existing infrastructure to the cloud with minimal downtime and maximum efficiency. We help you leverage cloud technologies for improved scalability, security, cost efficiency, and business agility. Our migration services ensure a smooth transition with comprehensive planning, execution, and optimization.',
|
||||
'short_description': 'Seamless enterprise cloud migration with enhanced security, scalability, and cost optimization.',
|
||||
'slug': 'enterprise-cloud-migration-services',
|
||||
'icon': 'cloud',
|
||||
'price': '50000.00',
|
||||
'category_slug': 'cloud-services',
|
||||
'duration': '16-32 weeks',
|
||||
'deliverables': 'Cloud Architecture Design, Infrastructure as Code (IaC), Data Migration Plan & Execution, Security Configuration & Compliance, Monitoring & Alerting Setup, Disaster Recovery Plan, Cost Optimization Strategy, Performance Tuning, Training & Documentation, Ongoing Support & Optimization',
|
||||
'technologies': 'AWS, Azure, Google Cloud Platform, Docker, Kubernetes, Terraform, Ansible, CloudFormation, CI/CD Pipelines, Monitoring Tools (CloudWatch, Datadog, New Relic)',
|
||||
'process_steps': 'Assessment & Planning, Architecture Design, Proof of Concept, Migration Strategy, Phased Migration Execution, Testing & Validation, Optimization, Training, Go-Live Support, Ongoing Management',
|
||||
'features_description': 'Comprehensive cloud migration with features including automated infrastructure provisioning, multi-region deployment, auto-scaling, disaster recovery, and cost optimization.',
|
||||
'deliverables_description': 'Complete cloud infrastructure with automated deployment, monitoring, security hardening, documentation, and ongoing optimization support.',
|
||||
'process_description': 'We follow a phased migration approach with thorough testing, minimal downtime, and comprehensive rollback plans to ensure business continuity.',
|
||||
'why_choose_description': 'Our cloud migration expertise, combined with proven methodologies, ensures a smooth transition with minimal risk and maximum value realization.',
|
||||
'expertise_description': 'Certified cloud architects with extensive experience in AWS, Azure, and GCP, specializing in enterprise migrations and cloud-native architectures.',
|
||||
'image_keyword': 'cloud migration enterprise infrastructure technology',
|
||||
'title': 'IT Infrastructure Management & Support Services',
|
||||
'description': 'Comprehensive infrastructure support services to maintain, monitor, and optimize your IT infrastructure. We provide 24/7 support, proactive monitoring, and infrastructure management to ensure your systems run smoothly and efficiently.',
|
||||
'short_description': 'Complete infrastructure support services for reliable and optimized IT systems.',
|
||||
'slug': 'it-infrastructure-management-support-services',
|
||||
'icon': 'settings',
|
||||
'price': '30000.00',
|
||||
'category_slug': 'infrastructure',
|
||||
'duration': 'Ongoing',
|
||||
'deliverables': '24/7 Monitoring, Incident Response, Performance Optimization, Security Updates, Backup Management, Capacity Planning, Documentation, Regular Reports, Proactive Maintenance, Support',
|
||||
'technologies': 'AWS, Azure, GCP, Docker, Kubernetes, Terraform, Ansible, Monitoring Tools, Logging Systems, CI/CD',
|
||||
'process_steps': 'Infrastructure Assessment, Monitoring Setup, Support Process, Incident Response Plan, Regular Maintenance, Performance Optimization, Security Updates, Reporting, Continuous Improvement',
|
||||
'features_description': 'Comprehensive infrastructure support with 24/7 monitoring, proactive maintenance, rapid incident response, and continuous optimization.',
|
||||
'deliverables_description': 'Complete infrastructure support package with monitoring, maintenance, and optimization services for reliable operations.',
|
||||
'process_description': 'We provide ongoing support with proactive monitoring, regular maintenance, and continuous optimization of your infrastructure.',
|
||||
'why_choose_description': 'Our infrastructure support ensures your systems are always running optimally with minimal downtime and maximum reliability.',
|
||||
'expertise_description': 'Infrastructure specialists with expertise in cloud platforms, containerization, and infrastructure automation.',
|
||||
'image_keyword': 'cloud infrastructure network technology data center',
|
||||
'unsplash_photo_id': '1557804506-2a27b1fb0947', # Cloud infrastructure
|
||||
'featured': True,
|
||||
'display_order': 4,
|
||||
'is_active': True,
|
||||
},
|
||||
{
|
||||
'title': 'Enterprise DevOps & CI/CD Solutions',
|
||||
'description': 'Implement enterprise-grade DevOps practices and CI/CD pipelines to accelerate software delivery, improve quality, and reduce operational overhead. We design and implement comprehensive DevOps solutions that enable continuous integration, continuous deployment, and infrastructure automation.',
|
||||
'short_description': 'Enterprise DevOps and CI/CD solutions for automated software delivery and infrastructure management.',
|
||||
'slug': 'enterprise-devops-cicd-solutions',
|
||||
'icon': 'settings',
|
||||
'price': '30000.00',
|
||||
'category_slug': 'enterprise-solutions',
|
||||
'duration': '8-16 weeks',
|
||||
'deliverables': 'CI/CD Pipeline Setup, Infrastructure as Code, Automated Testing Integration, Deployment Automation, Monitoring & Logging Setup, Security Scanning Integration, Documentation, Team Training, Best Practices Guide, Ongoing Support',
|
||||
'technologies': 'Jenkins, GitLab CI, GitHub Actions, Azure DevOps, Docker, Kubernetes, Terraform, Ansible, Prometheus, Grafana, ELK Stack, SonarQube',
|
||||
'process_steps': 'Assessment & Planning, Tool Selection, Pipeline Design, Implementation, Testing, Documentation, Training, Go-Live, Optimization, Ongoing Support',
|
||||
'features_description': 'Comprehensive DevOps solutions with automated builds, testing, security scanning, deployment pipelines, infrastructure provisioning, and monitoring.',
|
||||
'deliverables_description': 'Complete DevOps infrastructure with automated pipelines, monitoring dashboards, documentation, and team training for sustainable operations.',
|
||||
'process_description': 'We implement DevOps best practices with a focus on automation, quality gates, security, and continuous improvement.',
|
||||
'why_choose_description': 'Our DevOps expertise helps you achieve faster time-to-market, improved quality, reduced costs, and enhanced team productivity.',
|
||||
'expertise_description': 'Experienced DevOps engineers with deep knowledge of CI/CD tools, containerization, orchestration, and infrastructure automation.',
|
||||
'image_keyword': 'devops cicd automation enterprise technology',
|
||||
'title': 'Enterprise Server Management & Administration Services',
|
||||
'description': 'Complete server management and configuration services for optimal performance and reliability. We handle server setup, configuration, optimization, and maintenance to ensure your servers run efficiently and securely.',
|
||||
'short_description': 'Professional server management and configuration services for optimal performance.',
|
||||
'slug': 'enterprise-server-management-administration-services',
|
||||
'icon': 'server',
|
||||
'price': '20000.00',
|
||||
'category_slug': 'infrastructure',
|
||||
'duration': 'Ongoing',
|
||||
'deliverables': 'Server Setup & Configuration, Performance Optimization, Security Hardening, Monitoring Setup, Backup Configuration, Maintenance Plans, Documentation, Training, Support',
|
||||
'technologies': 'Linux, Windows Server, Nginx, Apache, Docker, Kubernetes, Cloud Servers, Monitoring Tools, Backup Solutions',
|
||||
'process_steps': 'Server Assessment, Setup & Configuration, Security Hardening, Performance Tuning, Monitoring Setup, Backup Configuration, Documentation, Training, Ongoing Maintenance',
|
||||
'features_description': 'Comprehensive server services with optimized configuration, security hardening, performance tuning, and proactive monitoring.',
|
||||
'deliverables_description': 'Fully configured and optimized servers with monitoring, backups, and maintenance plans for reliable operations.',
|
||||
'process_description': 'We provide complete server management with careful configuration, security hardening, and ongoing optimization.',
|
||||
'why_choose_description': 'Our server services ensure your servers are configured optimally, secure, and running at peak performance.',
|
||||
'expertise_description': 'Server administrators with deep knowledge of server configuration, optimization, and security best practices.',
|
||||
'image_keyword': 'server rack data center hardware technology',
|
||||
'unsplash_photo_id': '1558497419-80c43fea0fbe', # Server rack
|
||||
'featured': False,
|
||||
'display_order': 5,
|
||||
'is_active': True,
|
||||
},
|
||||
{
|
||||
'title': 'Enterprise Data Analytics & Business Intelligence',
|
||||
'description': 'Transform your data into actionable insights with enterprise-grade analytics and business intelligence solutions. We build comprehensive data pipelines, analytics platforms, and visualization dashboards that enable data-driven decision making across your organization.',
|
||||
'short_description': 'Enterprise data analytics and BI solutions for data-driven decision making and business insights.',
|
||||
'slug': 'enterprise-data-analytics-business-intelligence',
|
||||
'icon': 'analytics',
|
||||
'price': '40000.00',
|
||||
'category_slug': 'enterprise-solutions',
|
||||
'duration': '12-24 weeks',
|
||||
'deliverables': 'Data Pipeline Architecture, ETL/ELT Processes, Data Warehouse Setup, Analytics Platform, BI Dashboards, Custom Reports, Data Visualization, Predictive Analytics Models, Documentation, Training',
|
||||
'technologies': 'Python, R, SQL, Apache Spark, Airflow, Snowflake, BigQuery, Redshift, Tableau, Power BI, Looker, Jupyter Notebooks, ML Models',
|
||||
'process_steps': 'Data Assessment, Architecture Design, Pipeline Development, Data Integration, Analytics Development, Dashboard Creation, Testing, Training, Deployment, Ongoing Support',
|
||||
'features_description': 'Advanced analytics with real-time data processing, predictive modeling, interactive dashboards, automated reporting, and machine learning capabilities.',
|
||||
'deliverables_description': 'Complete analytics solution with data pipelines, warehouses, dashboards, reports, and training for your team.',
|
||||
'process_description': 'We follow a data-driven approach with iterative development, stakeholder feedback, and continuous refinement of analytics models.',
|
||||
'why_choose_description': 'Our analytics expertise helps you unlock the value in your data, make informed decisions, and gain competitive advantages through insights.',
|
||||
'expertise_description': 'Data scientists and engineers with expertise in big data technologies, machine learning, and business intelligence platforms.',
|
||||
'image_keyword': 'data analytics business intelligence enterprise dashboard',
|
||||
'featured': False,
|
||||
'title': 'DevOps Engineering & Infrastructure Automation Services',
|
||||
'description': 'Comprehensive DevOps services to streamline your software delivery pipeline. We implement CI/CD pipelines, infrastructure automation, and DevOps best practices to accelerate development and improve deployment reliability.',
|
||||
'short_description': 'Complete DevOps services for automated software delivery and infrastructure management.',
|
||||
'slug': 'devops-engineering-infrastructure-automation-services',
|
||||
'icon': 'settings',
|
||||
'price': '28000.00',
|
||||
'category_slug': 'infrastructure',
|
||||
'duration': '8-16 weeks',
|
||||
'deliverables': 'CI/CD Pipeline, Infrastructure as Code, Automated Testing, Deployment Automation, Monitoring & Logging, Security Scanning, Documentation, Team Training, Best Practices, Support',
|
||||
'technologies': 'Jenkins, GitLab CI, GitHub Actions, Docker, Kubernetes, Terraform, Ansible, Prometheus, Grafana, ELK Stack',
|
||||
'process_steps': 'DevOps Assessment, Tool Selection, Pipeline Design, Implementation, Testing, Documentation, Training, Go-Live, Optimization, Ongoing Support',
|
||||
'features_description': 'Complete DevOps solutions with automated pipelines, infrastructure automation, comprehensive monitoring, and security integration.',
|
||||
'deliverables_description': 'Full DevOps infrastructure with automated pipelines, monitoring dashboards, and team training for sustainable operations.',
|
||||
'process_description': 'We implement DevOps best practices with automation, quality gates, and continuous improvement.',
|
||||
'why_choose_description': 'Our DevOps services help you achieve faster deployments, improved quality, and reduced operational overhead.',
|
||||
'expertise_description': 'DevOps engineers with expertise in CI/CD tools, containerization, and infrastructure automation.',
|
||||
'image_keyword': 'devops automation deployment pipeline technology',
|
||||
'unsplash_photo_id': '1558497419-80c43fea0fbe', # DevOps/automation
|
||||
'featured': True,
|
||||
'display_order': 6,
|
||||
'is_active': True,
|
||||
},
|
||||
{
|
||||
'title': 'Enterprise API Integration Services',
|
||||
'description': 'Seamless API integration services to connect your applications with third-party services and systems. We handle complex integrations, data transformation, and API management to enable smooth communication between different systems.',
|
||||
'short_description': 'Professional API integration services for seamless system connectivity.',
|
||||
'slug': 'enterprise-api-integration-services',
|
||||
'icon': 'api',
|
||||
'price': '15000.00',
|
||||
'category_slug': 'integration',
|
||||
'duration': '4-12 weeks',
|
||||
'deliverables': 'API Integration Setup, Data Transformation, Error Handling, Authentication Configuration, Testing Suite, Documentation, Monitoring, Support',
|
||||
'technologies': 'REST APIs, GraphQL, Webhooks, OAuth 2.0, JWT, Postman, API Gateway, Middleware, ETL Tools',
|
||||
'process_steps': 'API Analysis, Integration Design, Development, Authentication Setup, Testing, Error Handling, Documentation, Deployment, Monitoring, Support',
|
||||
'features_description': 'Comprehensive API integrations with secure authentication, error handling, data transformation, and monitoring capabilities.',
|
||||
'deliverables_description': 'Complete API integration solution with documentation, testing, and monitoring for reliable connectivity.',
|
||||
'process_description': 'We implement API integrations with careful design, thorough testing, and comprehensive error handling.',
|
||||
'why_choose_description': 'Our API integration expertise ensures seamless connectivity between your systems and third-party services.',
|
||||
'expertise_description': 'Integration specialists with experience in various APIs, authentication methods, and data transformation.',
|
||||
'image_keyword': 'api integration network connection technology',
|
||||
'unsplash_photo_id': '1460925895917-afdab827c52f', # API/network
|
||||
'featured': False,
|
||||
'display_order': 7,
|
||||
'is_active': True,
|
||||
},
|
||||
{
|
||||
'title': 'Artificial Intelligence & Machine Learning Solutions',
|
||||
'description': 'Cutting-edge AI and machine learning services to transform your business with intelligent automation and insights. We develop custom AI solutions, implement machine learning models, and integrate AI capabilities into your applications.',
|
||||
'short_description': 'Advanced AI and machine learning services for intelligent business solutions.',
|
||||
'slug': 'artificial-intelligence-machine-learning-solutions',
|
||||
'icon': 'brain',
|
||||
'price': '40000.00',
|
||||
'category_slug': 'ai-services',
|
||||
'duration': '12-24 weeks',
|
||||
'deliverables': 'AI Strategy, Machine Learning Models, Model Training & Deployment, AI Integration, Data Pipeline, Model Monitoring, Documentation, Training, Support',
|
||||
'technologies': 'Python, TensorFlow, PyTorch, Scikit-learn, OpenAI API, LangChain, MLflow, AWS SageMaker, Azure ML, Google AI',
|
||||
'process_steps': 'AI Strategy, Data Preparation, Model Development, Training & Validation, Deployment, Integration, Monitoring, Optimization, Documentation, Training',
|
||||
'features_description': 'Advanced AI solutions with custom machine learning models, intelligent automation, and seamless integration into your applications.',
|
||||
'deliverables_description': 'Complete AI solution with trained models, deployment infrastructure, and monitoring systems for continuous improvement.',
|
||||
'process_description': 'We develop AI solutions with iterative model development, thorough validation, and continuous monitoring for optimal performance.',
|
||||
'why_choose_description': 'Our AI expertise helps you leverage cutting-edge technology to automate processes and gain valuable insights from your data.',
|
||||
'expertise_description': 'AI specialists with deep knowledge of machine learning, deep learning, and AI integration into business applications.',
|
||||
'image_keyword': 'artificial intelligence machine learning neural network',
|
||||
'unsplash_photo_id': '1558497419-80c43fea0fbe', # AI/ML technology
|
||||
'featured': True,
|
||||
'display_order': 8,
|
||||
'is_active': True,
|
||||
},
|
||||
]
|
||||
|
||||
# Process each service
|
||||
for service_data in services_data:
|
||||
category_slug = service_data.pop('category_slug')
|
||||
image_keyword = service_data.pop('image_keyword')
|
||||
photo_id = service_data.pop('unsplash_photo_id', None)
|
||||
category = categories.get(category_slug)
|
||||
|
||||
if not category:
|
||||
@@ -296,27 +361,8 @@ class Command(BaseCommand):
|
||||
|
||||
service_data['category'] = category
|
||||
|
||||
# Check if service exists
|
||||
service, created = Service.objects.get_or_create(
|
||||
slug=service_data['slug'],
|
||||
defaults=service_data
|
||||
)
|
||||
|
||||
if not created and not update_existing:
|
||||
self.stdout.write(
|
||||
self.style.WARNING(f'Service already exists (skipping): {service.title}')
|
||||
)
|
||||
continue
|
||||
|
||||
if not created and update_existing:
|
||||
# Update existing service
|
||||
for key, value in service_data.items():
|
||||
setattr(service, key, value)
|
||||
service.save()
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS(f'Updated service: {service.title}')
|
||||
)
|
||||
else:
|
||||
# Create service (we already deleted all, so this will always create new)
|
||||
service = Service.objects.create(**service_data)
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS(f'Created service: {service.title}')
|
||||
)
|
||||
@@ -328,7 +374,8 @@ class Command(BaseCommand):
|
||||
image_keyword,
|
||||
width=width,
|
||||
height=height,
|
||||
api_key=unsplash_key
|
||||
api_key=unsplash_key,
|
||||
photo_id=photo_id
|
||||
)
|
||||
|
||||
if image_data:
|
||||
@@ -354,13 +401,7 @@ class Command(BaseCommand):
|
||||
self.style.WARNING(f' ⚠ No image downloaded for: {service.title}')
|
||||
)
|
||||
|
||||
# Add features for enterprise services
|
||||
if created or update_existing:
|
||||
# Clear existing features if updating
|
||||
if update_existing and not created:
|
||||
ServiceFeature.objects.filter(service=service).delete()
|
||||
|
||||
# Add enterprise features
|
||||
# Add features for services
|
||||
features_data = [
|
||||
{
|
||||
'title': 'Enterprise-Grade Security',
|
||||
@@ -425,13 +466,14 @@ class Command(BaseCommand):
|
||||
)
|
||||
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS('\n✓ Successfully imported enterprise sample data!')
|
||||
self.style.SUCCESS('\n✓ Successfully deleted all existing services and imported new services!')
|
||||
)
|
||||
if not unsplash_key:
|
||||
self.stdout.write(
|
||||
self.style.WARNING(
|
||||
'\nNote: Using Unsplash Source API (no key required). '
|
||||
'For better reliability, consider using --unsplash-key with an API key from https://unsplash.com/developers'
|
||||
'\nNote: Using Picsum Photos for images (no key required). '
|
||||
'Each service gets a unique image based on its keyword. '
|
||||
'For service-specific images, consider using --unsplash-key with an API key from https://unsplash.com/developers'
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,193 +0,0 @@
|
||||
# Support Center Module
|
||||
|
||||
Enterprise Support Center for handling customer support tickets, knowledge base articles, and support settings.
|
||||
|
||||
## Features
|
||||
|
||||
- **Ticket Management**
|
||||
- Create and track support tickets
|
||||
- Multiple ticket types (technical, billing, feature requests, etc.)
|
||||
- Priority and status management
|
||||
- Ticket categories and tags
|
||||
- SLA deadline tracking
|
||||
- Message and activity history
|
||||
|
||||
- **Knowledge Base**
|
||||
- Categorized articles
|
||||
- Search functionality
|
||||
- Featured articles
|
||||
- Article feedback (helpful/not helpful)
|
||||
- View count tracking
|
||||
- Rich content support
|
||||
|
||||
- **Public API**
|
||||
- Create tickets without authentication
|
||||
- Check ticket status by ticket number
|
||||
- Browse knowledge base articles
|
||||
- Search articles
|
||||
|
||||
## Setup
|
||||
|
||||
### 1. Run Migrations
|
||||
|
||||
```bash
|
||||
python manage.py migrate
|
||||
```
|
||||
|
||||
### 2. Populate Initial Data
|
||||
|
||||
```bash
|
||||
python manage.py populate_support_data
|
||||
```
|
||||
|
||||
This will create:
|
||||
- 5 ticket statuses (Open, In Progress, Pending Response, Resolved, Closed)
|
||||
- 4 ticket priorities (Low, Medium, High, Critical)
|
||||
- 6 ticket categories
|
||||
- 6 knowledge base categories
|
||||
- 6 sample knowledge base articles
|
||||
|
||||
### 3. Admin Access
|
||||
|
||||
Access the Django admin panel to manage:
|
||||
- Support tickets
|
||||
- Ticket categories, statuses, and priorities
|
||||
- Knowledge base categories and articles
|
||||
- Support settings
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Tickets
|
||||
|
||||
- `GET /api/support/tickets/` - List all tickets
|
||||
- `POST /api/support/tickets/` - Create a new ticket
|
||||
- `GET /api/support/tickets/{id}/` - Get ticket details
|
||||
- `POST /api/support/tickets/check-status/` - Check ticket status by ticket number
|
||||
- `POST /api/support/tickets/{id}/add-message/` - Add a message to a ticket
|
||||
|
||||
### Categories
|
||||
|
||||
- `GET /api/support/categories/` - List all ticket categories
|
||||
- `GET /api/support/statuses/` - List all ticket statuses
|
||||
- `GET /api/support/priorities/` - List all ticket priorities
|
||||
|
||||
### Knowledge Base
|
||||
|
||||
- `GET /api/support/knowledge-base/` - List all published articles
|
||||
- `GET /api/support/knowledge-base/{slug}/` - Get article details
|
||||
- `GET /api/support/knowledge-base/featured/` - Get featured articles
|
||||
- `GET /api/support/knowledge-base/by-category/{category_slug}/` - Get articles by category
|
||||
- `POST /api/support/knowledge-base/{slug}/mark-helpful/` - Mark article as helpful/not helpful
|
||||
- `GET /api/support/knowledge-base-categories/` - List all KB categories
|
||||
|
||||
### Settings
|
||||
|
||||
- `GET /api/support/settings/` - List all active support settings
|
||||
- `GET /api/support/settings/{setting_name}/` - Get specific setting
|
||||
|
||||
## Models
|
||||
|
||||
### SupportTicket
|
||||
Main model for support tickets with full tracking capabilities.
|
||||
|
||||
### TicketStatus
|
||||
Ticket status options (Open, In Progress, Resolved, etc.)
|
||||
|
||||
### TicketPriority
|
||||
Priority levels with SLA hours (Low, Medium, High, Critical)
|
||||
|
||||
### TicketCategory
|
||||
Categorize tickets for better organization
|
||||
|
||||
### TicketMessage
|
||||
Messages and updates on tickets
|
||||
|
||||
### TicketActivity
|
||||
Audit trail of all ticket changes
|
||||
|
||||
### KnowledgeBaseCategory
|
||||
Categories for knowledge base articles
|
||||
|
||||
### KnowledgeBaseArticle
|
||||
Knowledge base articles with rich content
|
||||
|
||||
### SupportSettings
|
||||
Configurable support center settings
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Create a Ticket
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
data = {
|
||||
"title": "Cannot login to my account",
|
||||
"description": "I've been trying to login but getting error 500",
|
||||
"ticket_type": "technical",
|
||||
"user_name": "John Doe",
|
||||
"user_email": "john@example.com",
|
||||
"user_phone": "+1234567890",
|
||||
"company": "Acme Corp",
|
||||
"category": 1 # Technical Support category ID
|
||||
}
|
||||
|
||||
response = requests.post('http://localhost:8000/api/support/tickets/', json=data)
|
||||
ticket = response.json()
|
||||
print(f"Ticket created: {ticket['ticket_number']}")
|
||||
```
|
||||
|
||||
### Check Ticket Status
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
data = {
|
||||
"ticket_number": "TKT-20231015-ABCDE"
|
||||
}
|
||||
|
||||
response = requests.post('http://localhost:8000/api/support/tickets/check-status/', json=data)
|
||||
ticket = response.json()
|
||||
print(f"Status: {ticket['status_name']}")
|
||||
```
|
||||
|
||||
### Search Knowledge Base
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
response = requests.get('http://localhost:8000/api/support/knowledge-base/', params={'search': 'login'})
|
||||
articles = response.json()
|
||||
for article in articles:
|
||||
print(f"- {article['title']}")
|
||||
```
|
||||
|
||||
## Frontend Integration
|
||||
|
||||
The support center is integrated with the Next.js frontend at `/support-center` with:
|
||||
- Ticket submission form
|
||||
- Knowledge base browser with search
|
||||
- Ticket status checker
|
||||
- Modern, responsive UI
|
||||
|
||||
## Email Notifications
|
||||
|
||||
To enable email notifications for tickets, configure email settings in `settings.py` and implement email templates in `support/templates/support/`.
|
||||
|
||||
## Security
|
||||
|
||||
- All endpoints are public (AllowAny permission)
|
||||
- Ticket numbers are randomly generated and hard to guess
|
||||
- Internal notes and messages are hidden from public API
|
||||
- Rate limiting recommended for production
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
- [ ] Live chat integration
|
||||
- [ ] File attachments for tickets
|
||||
- [ ] Email notifications
|
||||
- [ ] Ticket assignment and routing
|
||||
- [ ] SLA breach alerts
|
||||
- [ ] Advanced analytics dashboard
|
||||
- [ ] Webhook notifications
|
||||
|
||||
@@ -3,15 +3,53 @@ Email Service for Support Tickets
|
||||
Handles sending email notifications for ticket creation and updates
|
||||
"""
|
||||
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
from django.core.mail import EmailMultiAlternatives, get_connection
|
||||
from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
from django.utils.html import strip_tags
|
||||
import logging
|
||||
import time
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _send_email_with_retry(email_message, max_retries: int = 3, delay: float = 1.0) -> bool:
|
||||
"""
|
||||
Send email with retry logic for production reliability.
|
||||
Uses Django settings from .env file.
|
||||
|
||||
Args:
|
||||
email_message: EmailMultiAlternatives instance
|
||||
max_retries: Maximum number of retry attempts
|
||||
delay: Delay between retries in seconds
|
||||
|
||||
Returns:
|
||||
bool: True if email was sent successfully, False otherwise
|
||||
"""
|
||||
for attempt in range(max_retries + 1):
|
||||
try:
|
||||
# Test connection before sending (uses EMAIL_BACKEND from settings)
|
||||
connection = get_connection()
|
||||
connection.open()
|
||||
connection.close()
|
||||
|
||||
# Send the email (uses EMAIL_BACKEND and credentials from settings)
|
||||
email_message.send()
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"Email send attempt {attempt + 1} failed: {str(e)}")
|
||||
|
||||
if attempt < max_retries:
|
||||
time.sleep(delay * (2 ** attempt)) # Exponential backoff
|
||||
continue
|
||||
else:
|
||||
logger.error(f"Failed to send email after {max_retries + 1} attempts: {str(e)}")
|
||||
return False
|
||||
|
||||
return False
|
||||
|
||||
|
||||
class SupportEmailService:
|
||||
"""Service for sending support ticket related emails"""
|
||||
|
||||
@@ -39,6 +77,8 @@ class SupportEmailService:
|
||||
'status': ticket.status.name if ticket.status else 'Open',
|
||||
'created_at': ticket.created_at.strftime('%B %d, %Y at %I:%M %p'),
|
||||
'support_url': f'{settings.SITE_URL}/support-center',
|
||||
'logo_url': f'{settings.SITE_URL}/images/logo.png',
|
||||
'site_url': settings.SITE_URL,
|
||||
}
|
||||
|
||||
# Render HTML email
|
||||
@@ -53,22 +93,25 @@ class SupportEmailService:
|
||||
context
|
||||
)
|
||||
|
||||
# Create email
|
||||
# Create email (uses DEFAULT_FROM_EMAIL from settings)
|
||||
email = EmailMultiAlternatives(
|
||||
subject=subject,
|
||||
body=text_message,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL, # From .env file
|
||||
to=[ticket.user_email],
|
||||
)
|
||||
|
||||
# Attach HTML version
|
||||
email.attach_alternative(html_message, "text/html")
|
||||
|
||||
# Send email
|
||||
email.send(fail_silently=False)
|
||||
# Send email with retry logic (uses EMAIL_BACKEND and credentials from settings)
|
||||
success = _send_email_with_retry(email)
|
||||
|
||||
if success:
|
||||
logger.info(f'Ticket confirmation email sent to user: {ticket.user_email} for ticket {ticket.ticket_number}')
|
||||
return True
|
||||
else:
|
||||
logger.error(f'Failed to send ticket confirmation email to user: {ticket.user_email} for ticket {ticket.ticket_number} after retries')
|
||||
return success
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to send ticket confirmation email to user: {str(e)}')
|
||||
@@ -104,6 +147,8 @@ class SupportEmailService:
|
||||
'status': ticket.status.name if ticket.status else 'Open',
|
||||
'created_at': ticket.created_at.strftime('%B %d, %Y at %I:%M %p'),
|
||||
'admin_url': f'{settings.SITE_URL}/admin/support/supportticket/{ticket.id}/change/',
|
||||
'logo_url': f'{settings.SITE_URL}/images/logo.png',
|
||||
'site_url': settings.SITE_URL,
|
||||
}
|
||||
|
||||
# Render HTML email
|
||||
@@ -118,23 +163,26 @@ class SupportEmailService:
|
||||
context
|
||||
)
|
||||
|
||||
# Create email
|
||||
# Create email (uses DEFAULT_FROM_EMAIL and SUPPORT_EMAIL from settings)
|
||||
email = EmailMultiAlternatives(
|
||||
subject=subject,
|
||||
body=text_message,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL,
|
||||
to=[company_email],
|
||||
from_email=settings.DEFAULT_FROM_EMAIL, # From .env file
|
||||
to=[company_email], # Uses settings.SUPPORT_EMAIL or settings.DEFAULT_FROM_EMAIL
|
||||
reply_to=[ticket.user_email],
|
||||
)
|
||||
|
||||
# Attach HTML version
|
||||
email.attach_alternative(html_message, "text/html")
|
||||
|
||||
# Send email
|
||||
email.send(fail_silently=False)
|
||||
# Send email with retry logic (uses EMAIL_BACKEND and credentials from settings)
|
||||
success = _send_email_with_retry(email)
|
||||
|
||||
if success:
|
||||
logger.info(f'Ticket notification email sent to company: {company_email} for ticket {ticket.ticket_number}')
|
||||
return True
|
||||
else:
|
||||
logger.error(f'Failed to send ticket notification email to company: {company_email} for ticket {ticket.ticket_number} after retries')
|
||||
return success
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to send ticket notification email to company: {str(e)}')
|
||||
|
||||
@@ -1,16 +1,32 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.utils.text import slugify
|
||||
from django.db import transaction
|
||||
from support.models import (
|
||||
TicketStatus, TicketPriority, TicketCategory,
|
||||
KnowledgeBaseCategory, KnowledgeBaseArticle
|
||||
)
|
||||
from services.models import Service
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Populate support center with initial data'
|
||||
help = 'Populate support center with enterprise support data based on services'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'--delete-old',
|
||||
action='store_true',
|
||||
help='Delete all existing support data before populating',
|
||||
)
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
self.stdout.write(self.style.SUCCESS('Starting to populate support data...'))
|
||||
delete_old = kwargs.get('delete_old', False)
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('Starting to populate enterprise support data...'))
|
||||
|
||||
with transaction.atomic():
|
||||
# Delete old data if requested
|
||||
if delete_old:
|
||||
self.delete_old_data()
|
||||
|
||||
# Create Ticket Statuses
|
||||
self.create_ticket_statuses()
|
||||
@@ -18,7 +34,7 @@ class Command(BaseCommand):
|
||||
# Create Ticket Priorities
|
||||
self.create_ticket_priorities()
|
||||
|
||||
# Create Ticket Categories
|
||||
# Create Ticket Categories based on services
|
||||
self.create_ticket_categories()
|
||||
|
||||
# Create Knowledge Base Categories
|
||||
@@ -27,17 +43,45 @@ class Command(BaseCommand):
|
||||
# Create Knowledge Base Articles
|
||||
self.create_kb_articles()
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('Successfully populated support data!'))
|
||||
self.stdout.write(self.style.SUCCESS('Successfully populated enterprise support data!'))
|
||||
|
||||
def delete_old_data(self):
|
||||
"""Delete all existing support data"""
|
||||
self.stdout.write(self.style.WARNING('Deleting old support data...'))
|
||||
|
||||
# Delete in reverse order of dependencies
|
||||
kb_articles_count = KnowledgeBaseArticle.objects.count()
|
||||
KnowledgeBaseArticle.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {kb_articles_count} knowledge base articles')
|
||||
|
||||
kb_categories_count = KnowledgeBaseCategory.objects.count()
|
||||
KnowledgeBaseCategory.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {kb_categories_count} knowledge base categories')
|
||||
|
||||
ticket_categories_count = TicketCategory.objects.count()
|
||||
TicketCategory.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {ticket_categories_count} ticket categories')
|
||||
|
||||
ticket_priorities_count = TicketPriority.objects.count()
|
||||
TicketPriority.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {ticket_priorities_count} ticket priorities')
|
||||
|
||||
ticket_statuses_count = TicketStatus.objects.count()
|
||||
TicketStatus.objects.all().delete()
|
||||
self.stdout.write(f' ✓ Deleted {ticket_statuses_count} ticket statuses')
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('Old data deleted successfully!'))
|
||||
|
||||
def create_ticket_statuses(self):
|
||||
self.stdout.write('Creating ticket statuses...')
|
||||
|
||||
statuses = [
|
||||
{'name': 'Open', 'color': '#3b82f6', 'description': 'Ticket has been opened', 'is_closed': False, 'display_order': 1},
|
||||
{'name': 'In Progress', 'color': '#f59e0b', 'description': 'Ticket is being worked on', 'is_closed': False, 'display_order': 2},
|
||||
{'name': 'Pending Response', 'color': '#8b5cf6', 'description': 'Waiting for customer response', 'is_closed': False, 'display_order': 3},
|
||||
{'name': 'Resolved', 'color': '#10b981', 'description': 'Ticket has been resolved', 'is_closed': True, 'display_order': 4},
|
||||
{'name': 'Closed', 'color': '#6b7280', 'description': 'Ticket has been closed', 'is_closed': True, 'display_order': 5},
|
||||
{'name': 'Open', 'color': '#3b82f6', 'description': 'Ticket has been opened and is awaiting assignment', 'is_closed': False, 'display_order': 1},
|
||||
{'name': 'In Progress', 'color': '#f59e0b', 'description': 'Ticket is being actively worked on by support team', 'is_closed': False, 'display_order': 2},
|
||||
{'name': 'Pending Response', 'color': '#8b5cf6', 'description': 'Waiting for customer response or additional information', 'is_closed': False, 'display_order': 3},
|
||||
{'name': 'On Hold', 'color': '#6b7280', 'description': 'Ticket is temporarily on hold', 'is_closed': False, 'display_order': 4},
|
||||
{'name': 'Resolved', 'color': '#10b981', 'description': 'Ticket has been resolved and is awaiting customer confirmation', 'is_closed': True, 'display_order': 5},
|
||||
{'name': 'Closed', 'color': '#6b7280', 'description': 'Ticket has been closed', 'is_closed': True, 'display_order': 6},
|
||||
]
|
||||
|
||||
for status_data in statuses:
|
||||
@@ -54,10 +98,10 @@ class Command(BaseCommand):
|
||||
self.stdout.write('Creating ticket priorities...')
|
||||
|
||||
priorities = [
|
||||
{'name': 'Low', 'level': 4, 'color': '#6b7280', 'description': 'Low priority issue', 'sla_hours': 72},
|
||||
{'name': 'Medium', 'level': 3, 'color': '#3b82f6', 'description': 'Medium priority issue', 'sla_hours': 48},
|
||||
{'name': 'High', 'level': 2, 'color': '#f59e0b', 'description': 'High priority issue', 'sla_hours': 24},
|
||||
{'name': 'Critical', 'level': 1, 'color': '#ef4444', 'description': 'Critical issue requiring immediate attention', 'sla_hours': 4},
|
||||
{'name': 'Low', 'level': 4, 'color': '#6b7280', 'description': 'Low priority issue - non-urgent', 'sla_hours': 72},
|
||||
{'name': 'Medium', 'level': 3, 'color': '#3b82f6', 'description': 'Medium priority issue - standard response', 'sla_hours': 48},
|
||||
{'name': 'High', 'level': 2, 'color': '#f59e0b', 'description': 'High priority issue - requires prompt attention', 'sla_hours': 24},
|
||||
{'name': 'Critical', 'level': 1, 'color': '#ef4444', 'description': 'Critical issue requiring immediate attention - production down', 'sla_hours': 4},
|
||||
]
|
||||
|
||||
for priority_data in priorities:
|
||||
@@ -71,37 +115,108 @@ class Command(BaseCommand):
|
||||
self.stdout.write(f' - Priority already exists: {priority.name}')
|
||||
|
||||
def create_ticket_categories(self):
|
||||
self.stdout.write('Creating ticket categories...')
|
||||
self.stdout.write('Creating ticket categories based on services...')
|
||||
|
||||
categories = [
|
||||
{'name': 'Technical Support', 'description': 'Technical issues and troubleshooting', 'color': '#3b82f6', 'icon': 'fa-wrench', 'display_order': 1},
|
||||
# Get all active services
|
||||
services = Service.objects.filter(is_active=True).order_by('display_order')
|
||||
|
||||
# Service-based categories with icons and colors
|
||||
service_category_mapping = {
|
||||
'backend': {'icon': 'fa-server', 'color': '#3b82f6', 'description': 'Backend development, APIs, and server-side issues'},
|
||||
'frontend': {'icon': 'fa-code', 'color': '#10b981', 'description': 'Frontend development, UI/UX, and client-side issues'},
|
||||
'data': {'icon': 'fa-database', 'color': '#8b5cf6', 'description': 'Data replication, synchronization, and database issues'},
|
||||
'infrastructure': {'icon': 'fa-cloud', 'color': '#f59e0b', 'description': 'Infrastructure management, cloud services, and system administration'},
|
||||
'server': {'icon': 'fa-server', 'color': '#ef4444', 'description': 'Server management, configuration, and administration'},
|
||||
'devops': {'icon': 'fa-cogs', 'color': '#06b6d4', 'description': 'DevOps, CI/CD, automation, and deployment issues'},
|
||||
'api': {'icon': 'fa-plug', 'color': '#ec4899', 'description': 'API integration, connectivity, and third-party service issues'},
|
||||
'ai': {'icon': 'fa-brain', 'color': '#daa520', 'description': 'AI/ML solutions, model training, and machine learning issues'},
|
||||
}
|
||||
|
||||
# Base categories that apply to all services
|
||||
base_categories = [
|
||||
{'name': 'Technical Support', 'description': 'General technical issues and troubleshooting', 'color': '#3b82f6', 'icon': 'fa-wrench', 'display_order': 1},
|
||||
{'name': 'Billing & Payments', 'description': 'Billing questions and payment issues', 'color': '#10b981', 'icon': 'fa-credit-card', 'display_order': 2},
|
||||
{'name': 'Account Management', 'description': 'Account settings and access issues', 'color': '#8b5cf6', 'icon': 'fa-user-cog', 'display_order': 3},
|
||||
{'name': 'Product Inquiry', 'description': 'Questions about products and features', 'color': '#f59e0b', 'icon': 'fa-box', 'display_order': 4},
|
||||
{'name': 'Feature Requests', 'description': 'Request new features or improvements', 'color': '#06b6d4', 'icon': 'fa-lightbulb', 'display_order': 4},
|
||||
{'name': 'Bug Reports', 'description': 'Report software bugs and issues', 'color': '#ef4444', 'icon': 'fa-bug', 'display_order': 5},
|
||||
{'name': 'Feature Requests', 'description': 'Request new features or improvements', 'color': '#06b6d4', 'icon': 'fa-lightbulb', 'display_order': 6},
|
||||
]
|
||||
|
||||
for category_data in categories:
|
||||
# Create base categories
|
||||
display_order = 1
|
||||
for category_data in base_categories:
|
||||
category, created = TicketCategory.objects.get_or_create(
|
||||
name=category_data['name'],
|
||||
defaults=category_data
|
||||
defaults={**category_data, 'display_order': display_order}
|
||||
)
|
||||
if created:
|
||||
self.stdout.write(self.style.SUCCESS(f' ✓ Created category: {category.name}'))
|
||||
else:
|
||||
self.stdout.write(f' - Category already exists: {category.name}')
|
||||
display_order += 1
|
||||
|
||||
# Create service-specific categories
|
||||
for service in services:
|
||||
service_title_lower = service.title.lower()
|
||||
category_name = None
|
||||
category_config = None
|
||||
|
||||
# Map service to category
|
||||
if 'backend' in service_title_lower:
|
||||
category_name = f'{service.title} Support'
|
||||
category_config = service_category_mapping['backend']
|
||||
elif 'frontend' in service_title_lower:
|
||||
category_name = f'{service.title} Support'
|
||||
category_config = service_category_mapping['frontend']
|
||||
elif 'data replication' in service_title_lower or 'synchronization' in service_title_lower:
|
||||
category_name = f'{service.title} Support'
|
||||
category_config = service_category_mapping['data']
|
||||
elif 'infrastructure management' in service_title_lower or 'infrastructure support' in service_title_lower:
|
||||
category_name = f'{service.title} Support'
|
||||
category_config = service_category_mapping['infrastructure']
|
||||
elif 'server management' in service_title_lower or 'server administration' in service_title_lower:
|
||||
category_name = f'{service.title} Support'
|
||||
category_config = service_category_mapping['server']
|
||||
elif 'devops' in service_title_lower or 'automation' in service_title_lower:
|
||||
category_name = f'{service.title} Support'
|
||||
category_config = service_category_mapping['devops']
|
||||
elif 'api integration' in service_title_lower:
|
||||
category_name = f'{service.title} Support'
|
||||
category_config = service_category_mapping['api']
|
||||
elif 'artificial intelligence' in service_title_lower or 'machine learning' in service_title_lower or 'ai' in service_title_lower:
|
||||
category_name = f'{service.title} Support'
|
||||
category_config = service_category_mapping['ai']
|
||||
|
||||
if category_name and category_config:
|
||||
category, created = TicketCategory.objects.get_or_create(
|
||||
name=category_name,
|
||||
defaults={
|
||||
'description': f'Support for {service.title}. {category_config["description"]}',
|
||||
'color': category_config['color'],
|
||||
'icon': category_config['icon'],
|
||||
'display_order': display_order
|
||||
}
|
||||
)
|
||||
if created:
|
||||
self.stdout.write(self.style.SUCCESS(f' ✓ Created category: {category.name}'))
|
||||
else:
|
||||
self.stdout.write(f' - Category already exists: {category.name}')
|
||||
display_order += 1
|
||||
|
||||
def create_kb_categories(self):
|
||||
self.stdout.write('Creating knowledge base categories...')
|
||||
|
||||
categories = [
|
||||
{'name': 'Getting Started', 'slug': 'getting-started', 'description': 'Learn the basics and get started quickly', 'icon': 'fa-rocket', 'color': '#3b82f6', 'display_order': 1},
|
||||
{'name': 'Account & Billing', 'slug': 'account-billing', 'description': 'Manage your account and billing information', 'icon': 'fa-user-circle', 'color': '#10b981', 'display_order': 2},
|
||||
{'name': 'Technical Documentation', 'slug': 'technical-docs', 'description': 'Technical guides and API documentation', 'icon': 'fa-code', 'color': '#8b5cf6', 'display_order': 3},
|
||||
{'name': 'Troubleshooting', 'slug': 'troubleshooting', 'description': 'Common issues and how to resolve them', 'icon': 'fa-tools', 'color': '#f59e0b', 'display_order': 4},
|
||||
{'name': 'Security & Privacy', 'slug': 'security-privacy', 'description': 'Security features and privacy settings', 'icon': 'fa-shield-alt', 'color': '#ef4444', 'display_order': 5},
|
||||
{'name': 'Best Practices', 'slug': 'best-practices', 'description': 'Tips and best practices for optimal use', 'icon': 'fa-star', 'color': '#daa520', 'display_order': 6},
|
||||
{'name': 'Getting Started', 'slug': 'getting-started', 'description': 'Learn the basics and get started with our enterprise services', 'icon': 'fa-rocket', 'color': '#3b82f6', 'display_order': 1},
|
||||
{'name': 'Backend Development', 'slug': 'backend-development', 'description': 'Backend development guides, APIs, and server-side documentation', 'icon': 'fa-server', 'color': '#3b82f6', 'display_order': 2},
|
||||
{'name': 'Frontend Development', 'slug': 'frontend-development', 'description': 'Frontend development guides, UI/UX, and client-side documentation', 'icon': 'fa-code', 'color': '#10b981', 'display_order': 3},
|
||||
{'name': 'Infrastructure & DevOps', 'slug': 'infrastructure-devops', 'description': 'Infrastructure management, DevOps, and deployment guides', 'icon': 'fa-cloud', 'color': '#f59e0b', 'display_order': 4},
|
||||
{'name': 'Data Management', 'slug': 'data-management', 'description': 'Data replication, synchronization, and database management', 'icon': 'fa-database', 'color': '#8b5cf6', 'display_order': 5},
|
||||
{'name': 'API Integration', 'slug': 'api-integration', 'description': 'API integration guides and third-party service connectivity', 'icon': 'fa-plug', 'color': '#ec4899', 'display_order': 6},
|
||||
{'name': 'AI & Machine Learning', 'slug': 'ai-machine-learning', 'description': 'AI/ML solutions, model training, and machine learning guides', 'icon': 'fa-brain', 'color': '#daa520', 'display_order': 7},
|
||||
{'name': 'Troubleshooting', 'slug': 'troubleshooting', 'description': 'Common issues and how to resolve them', 'icon': 'fa-tools', 'color': '#ef4444', 'display_order': 8},
|
||||
{'name': 'Security & Privacy', 'slug': 'security-privacy', 'description': 'Security features, best practices, and privacy settings', 'icon': 'fa-shield-alt', 'color': '#ef4444', 'display_order': 9},
|
||||
{'name': 'Account & Billing', 'slug': 'account-billing', 'description': 'Manage your account and billing information', 'icon': 'fa-user-circle', 'color': '#10b981', 'display_order': 10},
|
||||
{'name': 'Best Practices', 'slug': 'best-practices', 'description': 'Tips and best practices for optimal use of our services', 'icon': 'fa-star', 'color': '#daa520', 'display_order': 11},
|
||||
]
|
||||
|
||||
for category_data in categories:
|
||||
@@ -119,140 +234,455 @@ class Command(BaseCommand):
|
||||
|
||||
# Get categories
|
||||
getting_started = KnowledgeBaseCategory.objects.filter(slug='getting-started').first()
|
||||
account_billing = KnowledgeBaseCategory.objects.filter(slug='account-billing').first()
|
||||
technical = KnowledgeBaseCategory.objects.filter(slug='technical-docs').first()
|
||||
backend_dev = KnowledgeBaseCategory.objects.filter(slug='backend-development').first()
|
||||
frontend_dev = KnowledgeBaseCategory.objects.filter(slug='frontend-development').first()
|
||||
infrastructure = KnowledgeBaseCategory.objects.filter(slug='infrastructure-devops').first()
|
||||
data_mgmt = KnowledgeBaseCategory.objects.filter(slug='data-management').first()
|
||||
api_integration = KnowledgeBaseCategory.objects.filter(slug='api-integration').first()
|
||||
ai_ml = KnowledgeBaseCategory.objects.filter(slug='ai-machine-learning').first()
|
||||
troubleshooting = KnowledgeBaseCategory.objects.filter(slug='troubleshooting').first()
|
||||
security = KnowledgeBaseCategory.objects.filter(slug='security-privacy').first()
|
||||
account_billing = KnowledgeBaseCategory.objects.filter(slug='account-billing').first()
|
||||
best_practices = KnowledgeBaseCategory.objects.filter(slug='best-practices').first()
|
||||
|
||||
articles = [
|
||||
{
|
||||
'title': 'How to Get Started with Our Platform',
|
||||
'slug': 'how-to-get-started',
|
||||
'title': 'Getting Started with Enterprise Services',
|
||||
'slug': 'getting-started-enterprise-services',
|
||||
'category': getting_started,
|
||||
'summary': 'A comprehensive guide to help you get started with our platform quickly and easily.',
|
||||
'content': '''<h2>Welcome to Our Platform!</h2>
|
||||
<p>This guide will help you get started with our platform in just a few simple steps.</p>
|
||||
'summary': 'A comprehensive guide to help you get started with our enterprise services quickly and efficiently.',
|
||||
'content': '''<h2>Welcome to GNX Enterprise Services!</h2>
|
||||
<p>This guide will help you get started with our enterprise services in just a few simple steps.</p>
|
||||
|
||||
<h3>Step 1: Create Your Account</h3>
|
||||
<p>Visit our sign-up page and create your account using your email address or social login.</p>
|
||||
<h3>Step 1: Understand Your Service Package</h3>
|
||||
<p>Review your service agreement and understand what services are included in your package. Each service comes with specific deliverables, timelines, and support options.</p>
|
||||
|
||||
<h3>Step 2: Complete Your Profile</h3>
|
||||
<p>Add your company information and customize your profile settings.</p>
|
||||
<h3>Step 2: Access Your Service Portal</h3>
|
||||
<p>Log in to your enterprise portal to access service documentation, support tickets, and project management tools.</p>
|
||||
|
||||
<h3>Step 3: Explore the Dashboard</h3>
|
||||
<p>Familiarize yourself with the main dashboard and available features.</p>
|
||||
<h3>Step 3: Set Up Your Development Environment</h3>
|
||||
<p>Follow the setup guides for your specific services. We provide detailed documentation for backend, frontend, infrastructure, and integration services.</p>
|
||||
|
||||
<h3>Step 4: Start Using Our Services</h3>
|
||||
<p>Begin using our services and tools to achieve your business goals.</p>
|
||||
<h3>Step 4: Connect with Your Support Team</h3>
|
||||
<p>Your dedicated support team is available 24/7. Use the support ticket system for technical issues or contact your account manager for service-related questions.</p>
|
||||
|
||||
<p>If you need any help, our support team is always here to assist you!</p>''',
|
||||
<h3>Step 5: Explore Knowledge Base</h3>
|
||||
<p>Browse our comprehensive knowledge base for detailed guides, API documentation, troubleshooting tips, and best practices.</p>
|
||||
|
||||
<p>If you need any help, our enterprise support team is always here to assist you!</p>''',
|
||||
'is_published': True,
|
||||
'is_featured': True,
|
||||
},
|
||||
{
|
||||
'title': 'Understanding Your Billing Cycle',
|
||||
'slug': 'understanding-billing-cycle',
|
||||
'category': account_billing,
|
||||
'summary': 'Learn how our billing cycle works and how to manage your payments.',
|
||||
'content': '''<h2>Billing Cycle Overview</h2>
|
||||
<p>Understanding your billing cycle is important for managing your subscription effectively.</p>
|
||||
'title': 'Enterprise Backend Development Best Practices',
|
||||
'slug': 'backend-development-best-practices',
|
||||
'category': backend_dev,
|
||||
'summary': 'Learn best practices for enterprise backend development including API design, database optimization, and security.',
|
||||
'content': '''<h2>Backend Development Best Practices</h2>
|
||||
<p>Follow these best practices to ensure your backend applications are robust, scalable, and secure.</p>
|
||||
|
||||
<h3>Monthly Billing</h3>
|
||||
<p>For monthly subscriptions, you'll be charged on the same date each month.</p>
|
||||
<h3>API Design Principles</h3>
|
||||
<ul>
|
||||
<li>Use RESTful conventions for API endpoints</li>
|
||||
<li>Implement proper versioning (e.g., /api/v1/)</li>
|
||||
<li>Use consistent naming conventions</li>
|
||||
<li>Return appropriate HTTP status codes</li>
|
||||
<li>Implement pagination for large datasets</li>
|
||||
</ul>
|
||||
|
||||
<h3>Annual Billing</h3>
|
||||
<p>Annual subscriptions offer a discount and are billed once per year.</p>
|
||||
<h3>Database Optimization</h3>
|
||||
<ul>
|
||||
<li>Use proper indexing for frequently queried fields</li>
|
||||
<li>Implement connection pooling</li>
|
||||
<li>Use database transactions appropriately</li>
|
||||
<li>Optimize queries to avoid N+1 problems</li>
|
||||
<li>Implement caching strategies</li>
|
||||
</ul>
|
||||
|
||||
<h3>Managing Your Subscription</h3>
|
||||
<p>You can upgrade, downgrade, or cancel your subscription at any time from your account settings.</p>''',
|
||||
<h3>Security Best Practices</h3>
|
||||
<ul>
|
||||
<li>Implement authentication and authorization</li>
|
||||
<li>Use HTTPS for all API communications</li>
|
||||
<li>Validate and sanitize all inputs</li>
|
||||
<li>Implement rate limiting</li>
|
||||
<li>Keep dependencies updated</li>
|
||||
</ul>
|
||||
|
||||
<h3>Performance Optimization</h3>
|
||||
<ul>
|
||||
<li>Implement caching at multiple levels</li>
|
||||
<li>Use async processing for long-running tasks</li>
|
||||
<li>Optimize database queries</li>
|
||||
<li>Implement proper logging and monitoring</li>
|
||||
<li>Use CDN for static assets</li>
|
||||
</ul>''',
|
||||
'is_published': True,
|
||||
'is_featured': True,
|
||||
},
|
||||
{
|
||||
'title': 'API Documentation Overview',
|
||||
'slug': 'api-documentation-overview',
|
||||
'category': technical,
|
||||
'summary': 'Complete guide to our API endpoints and authentication.',
|
||||
'content': '''<h2>API Documentation</h2>
|
||||
<p>Our API provides programmatic access to all platform features.</p>
|
||||
'title': 'Frontend Development Guidelines',
|
||||
'slug': 'frontend-development-guidelines',
|
||||
'category': frontend_dev,
|
||||
'summary': 'Comprehensive guidelines for building modern, responsive frontend applications.',
|
||||
'content': '''<h2>Frontend Development Guidelines</h2>
|
||||
<p>Build modern, performant, and accessible frontend applications with these guidelines.</p>
|
||||
|
||||
<h3>Authentication</h3>
|
||||
<p>All API requests require authentication using an API key.</p>
|
||||
<code>Authorization: Bearer YOUR_API_KEY</code>
|
||||
<h3>Component Architecture</h3>
|
||||
<ul>
|
||||
<li>Use component-based architecture (React, Vue, etc.)</li>
|
||||
<li>Keep components small and focused</li>
|
||||
<li>Implement proper state management</li>
|
||||
<li>Use reusable component libraries</li>
|
||||
<li>Follow consistent naming conventions</li>
|
||||
</ul>
|
||||
|
||||
<h3>Rate Limits</h3>
|
||||
<p>Standard accounts are limited to 1000 requests per hour.</p>
|
||||
<h3>Performance Optimization</h3>
|
||||
<ul>
|
||||
<li>Implement code splitting and lazy loading</li>
|
||||
<li>Optimize images and assets</li>
|
||||
<li>Use efficient rendering techniques</li>
|
||||
<li>Minimize bundle size</li>
|
||||
<li>Implement proper caching strategies</li>
|
||||
</ul>
|
||||
|
||||
<h3>Response Format</h3>
|
||||
<p>All responses are returned in JSON format.</p>''',
|
||||
<h3>Responsive Design</h3>
|
||||
<ul>
|
||||
<li>Use mobile-first approach</li>
|
||||
<li>Test on multiple devices and browsers</li>
|
||||
<li>Implement flexible layouts</li>
|
||||
<li>Optimize touch interactions</li>
|
||||
<li>Ensure proper viewport settings</li>
|
||||
</ul>
|
||||
|
||||
<h3>Accessibility</h3>
|
||||
<ul>
|
||||
<li>Use semantic HTML</li>
|
||||
<li>Implement proper ARIA labels</li>
|
||||
<li>Ensure keyboard navigation</li>
|
||||
<li>Maintain proper color contrast</li>
|
||||
<li>Test with screen readers</li>
|
||||
</ul>''',
|
||||
'is_published': True,
|
||||
'is_featured': True,
|
||||
},
|
||||
{
|
||||
'title': 'Common Login Issues and Solutions',
|
||||
'slug': 'common-login-issues',
|
||||
'title': 'DevOps and Infrastructure Setup Guide',
|
||||
'slug': 'devops-infrastructure-setup',
|
||||
'category': infrastructure,
|
||||
'summary': 'Complete guide to setting up DevOps pipelines and infrastructure automation.',
|
||||
'content': '''<h2>DevOps and Infrastructure Setup</h2>
|
||||
<p>Set up robust DevOps pipelines and infrastructure automation for your enterprise applications.</p>
|
||||
|
||||
<h3>CI/CD Pipeline Setup</h3>
|
||||
<ul>
|
||||
<li>Configure automated testing in your pipeline</li>
|
||||
<li>Implement code quality checks</li>
|
||||
<li>Set up automated deployments</li>
|
||||
<li>Configure environment-specific deployments</li>
|
||||
<li>Implement rollback strategies</li>
|
||||
</ul>
|
||||
|
||||
<h3>Infrastructure as Code</h3>
|
||||
<ul>
|
||||
<li>Use Terraform or CloudFormation for infrastructure</li>
|
||||
<li>Version control your infrastructure code</li>
|
||||
<li>Implement infrastructure testing</li>
|
||||
<li>Use configuration management tools</li>
|
||||
<li>Document infrastructure changes</li>
|
||||
</ul>
|
||||
|
||||
<h3>Containerization</h3>
|
||||
<ul>
|
||||
<li>Containerize your applications with Docker</li>
|
||||
<li>Use Kubernetes for orchestration</li>
|
||||
<li>Implement proper health checks</li>
|
||||
<li>Configure resource limits</li>
|
||||
<li>Set up container registries</li>
|
||||
</ul>
|
||||
|
||||
<h3>Monitoring and Logging</h3>
|
||||
<ul>
|
||||
<li>Implement comprehensive monitoring</li>
|
||||
<li>Set up centralized logging</li>
|
||||
<li>Configure alerting systems</li>
|
||||
<li>Use APM tools for performance monitoring</li>
|
||||
<li>Implement log aggregation</li>
|
||||
</ul>''',
|
||||
'is_published': True,
|
||||
'is_featured': True,
|
||||
},
|
||||
{
|
||||
'title': 'Data Replication and Synchronization Guide',
|
||||
'slug': 'data-replication-synchronization',
|
||||
'category': data_mgmt,
|
||||
'summary': 'Complete guide to setting up and managing data replication and synchronization.',
|
||||
'content': '''<h2>Data Replication and Synchronization</h2>
|
||||
<p>Ensure data consistency and availability with proper replication and synchronization strategies.</p>
|
||||
|
||||
<h3>Replication Strategies</h3>
|
||||
<ul>
|
||||
<li>Master-Slave replication for read scaling</li>
|
||||
<li>Master-Master replication for high availability</li>
|
||||
<li>Multi-region replication for disaster recovery</li>
|
||||
<li>Real-time vs. batch replication</li>
|
||||
<li>Conflict resolution strategies</li>
|
||||
</ul>
|
||||
|
||||
<h3>Synchronization Best Practices</h3>
|
||||
<ul>
|
||||
<li>Implement change data capture (CDC)</li>
|
||||
<li>Use transaction logs for consistency</li>
|
||||
<li>Monitor replication lag</li>
|
||||
<li>Implement data validation</li>
|
||||
<li>Set up automated failover</li>
|
||||
</ul>
|
||||
|
||||
<h3>Disaster Recovery</h3>
|
||||
<ul>
|
||||
<li>Regular backup schedules</li>
|
||||
<li>Test recovery procedures</li>
|
||||
<li>Maintain multiple backup copies</li>
|
||||
<li>Document recovery processes</li>
|
||||
<li>Monitor backup health</li>
|
||||
</ul>
|
||||
|
||||
<h3>Troubleshooting Common Issues</h3>
|
||||
<ul>
|
||||
<li>Replication lag issues</li>
|
||||
<li>Data inconsistency problems</li>
|
||||
<li>Network connectivity issues</li>
|
||||
<li>Storage capacity management</li>
|
||||
<li>Performance optimization</li>
|
||||
</ul>''',
|
||||
'is_published': True,
|
||||
'is_featured': False,
|
||||
},
|
||||
{
|
||||
'title': 'API Integration Best Practices',
|
||||
'slug': 'api-integration-best-practices',
|
||||
'category': api_integration,
|
||||
'summary': 'Best practices for integrating with third-party APIs and services.',
|
||||
'content': '''<h2>API Integration Best Practices</h2>
|
||||
<p>Integrate seamlessly with third-party APIs using these best practices.</p>
|
||||
|
||||
<h3>Authentication and Security</h3>
|
||||
<ul>
|
||||
<li>Use OAuth 2.0 for secure authentication</li>
|
||||
<li>Store API keys securely</li>
|
||||
<li>Implement token refresh mechanisms</li>
|
||||
<li>Use HTTPS for all API calls</li>
|
||||
<li>Validate API responses</li>
|
||||
</ul>
|
||||
|
||||
<h3>Error Handling</h3>
|
||||
<ul>
|
||||
<li>Implement retry logic with exponential backoff</li>
|
||||
<li>Handle rate limiting gracefully</li>
|
||||
<li>Log all API errors</li>
|
||||
<li>Implement circuit breakers</li>
|
||||
<li>Provide meaningful error messages</li>
|
||||
</ul>
|
||||
|
||||
<h3>Performance Optimization</h3>
|
||||
<ul>
|
||||
<li>Implement request caching</li>
|
||||
<li>Use batch requests when possible</li>
|
||||
<li>Implement connection pooling</li>
|
||||
<li>Monitor API response times</li>
|
||||
<li>Optimize payload sizes</li>
|
||||
</ul>
|
||||
|
||||
<h3>Testing and Monitoring</h3>
|
||||
<ul>
|
||||
<li>Test with sandbox environments</li>
|
||||
<li>Monitor API usage and costs</li>
|
||||
<li>Set up alerts for failures</li>
|
||||
<li>Document integration patterns</li>
|
||||
<li>Version your integrations</li>
|
||||
</ul>''',
|
||||
'is_published': True,
|
||||
'is_featured': False,
|
||||
},
|
||||
{
|
||||
'title': 'AI and Machine Learning Implementation Guide',
|
||||
'slug': 'ai-machine-learning-implementation',
|
||||
'category': ai_ml,
|
||||
'summary': 'Guide to implementing AI and machine learning solutions in your applications.',
|
||||
'content': '''<h2>AI and Machine Learning Implementation</h2>
|
||||
<p>Integrate AI and machine learning capabilities into your enterprise applications.</p>
|
||||
|
||||
<h3>Model Development</h3>
|
||||
<ul>
|
||||
<li>Define clear use cases and objectives</li>
|
||||
<li>Prepare and clean your data</li>
|
||||
<li>Choose appropriate algorithms</li>
|
||||
<li>Train and validate models</li>
|
||||
<li>Evaluate model performance</li>
|
||||
</ul>
|
||||
|
||||
<h3>Model Deployment</h3>
|
||||
<ul>
|
||||
<li>Containerize models for deployment</li>
|
||||
<li>Implement model versioning</li>
|
||||
<li>Set up model serving infrastructure</li>
|
||||
<li>Implement A/B testing</li>
|
||||
<li>Monitor model performance</li>
|
||||
</ul>
|
||||
|
||||
<h3>Integration Best Practices</h3>
|
||||
<ul>
|
||||
<li>Use API gateways for model access</li>
|
||||
<li>Implement proper authentication</li>
|
||||
<li>Handle model inference errors</li>
|
||||
<li>Optimize inference latency</li>
|
||||
<li>Implement caching strategies</li>
|
||||
</ul>
|
||||
|
||||
<h3>Monitoring and Maintenance</h3>
|
||||
<ul>
|
||||
<li>Monitor model accuracy over time</li>
|
||||
<li>Track data drift</li>
|
||||
<li>Implement model retraining pipelines</li>
|
||||
<li>Set up performance alerts</li>
|
||||
<li>Document model behavior</li>
|
||||
</ul>''',
|
||||
'is_published': True,
|
||||
'is_featured': True,
|
||||
},
|
||||
{
|
||||
'title': 'Common Troubleshooting Issues',
|
||||
'slug': 'common-troubleshooting-issues',
|
||||
'category': troubleshooting,
|
||||
'summary': 'Troubleshoot common login problems and learn how to resolve them.',
|
||||
'content': '''<h2>Login Troubleshooting</h2>
|
||||
<p>Having trouble logging in? Here are some common issues and solutions.</p>
|
||||
'summary': 'Common issues and their solutions for enterprise services.',
|
||||
'content': '''<h2>Common Troubleshooting Issues</h2>
|
||||
<p>Resolve common issues quickly with these troubleshooting guides.</p>
|
||||
|
||||
<h3>Forgot Password</h3>
|
||||
<p>Click "Forgot Password" on the login page to reset your password via email.</p>
|
||||
<h3>Connection Issues</h3>
|
||||
<ul>
|
||||
<li>Check network connectivity</li>
|
||||
<li>Verify firewall settings</li>
|
||||
<li>Test DNS resolution</li>
|
||||
<li>Check SSL/TLS certificates</li>
|
||||
<li>Review connection timeouts</li>
|
||||
</ul>
|
||||
|
||||
<h3>Account Locked</h3>
|
||||
<p>After multiple failed login attempts, your account may be temporarily locked for security.</p>
|
||||
<h3>Performance Issues</h3>
|
||||
<ul>
|
||||
<li>Check server resource usage</li>
|
||||
<li>Review database query performance</li>
|
||||
<li>Analyze application logs</li>
|
||||
<li>Check for memory leaks</li>
|
||||
<li>Review caching strategies</li>
|
||||
</ul>
|
||||
|
||||
<h3>Browser Issues</h3>
|
||||
<p>Clear your browser cache and cookies, or try a different browser.</p>
|
||||
<h3>Authentication Problems</h3>
|
||||
<ul>
|
||||
<li>Verify credentials</li>
|
||||
<li>Check token expiration</li>
|
||||
<li>Review permission settings</li>
|
||||
<li>Test with different accounts</li>
|
||||
<li>Check session management</li>
|
||||
</ul>
|
||||
|
||||
<h3>Still Having Issues?</h3>
|
||||
<p>Contact our support team for personalized assistance.</p>''',
|
||||
<h3>Data Issues</h3>
|
||||
<ul>
|
||||
<li>Verify data integrity</li>
|
||||
<li>Check replication status</li>
|
||||
<li>Review data validation rules</li>
|
||||
<li>Check for data corruption</li>
|
||||
<li>Verify backup integrity</li>
|
||||
</ul>
|
||||
|
||||
<p>If you continue to experience issues, please contact our support team.</p>''',
|
||||
'is_published': True,
|
||||
'is_featured': False,
|
||||
},
|
||||
{
|
||||
'title': 'How to Update Your Payment Method',
|
||||
'slug': 'update-payment-method',
|
||||
'category': account_billing,
|
||||
'summary': 'Step-by-step guide to updating your payment information.',
|
||||
'content': '''<h2>Updating Payment Information</h2>
|
||||
<p>Keep your payment method up to date to avoid service interruptions.</p>
|
||||
'title': 'Enterprise Security Best Practices',
|
||||
'slug': 'enterprise-security-best-practices',
|
||||
'category': security,
|
||||
'summary': 'Essential security practices for enterprise applications and infrastructure.',
|
||||
'content': '''<h2>Enterprise Security Best Practices</h2>
|
||||
<p>Protect your enterprise applications and data with these security best practices.</p>
|
||||
|
||||
<h3>Steps to Update</h3>
|
||||
<ol>
|
||||
<li>Go to Account Settings</li>
|
||||
<li>Click on "Billing & Payments"</li>
|
||||
<li>Select "Update Payment Method"</li>
|
||||
<li>Enter your new payment details</li>
|
||||
<li>Click "Save Changes"</li>
|
||||
</ol>
|
||||
<h3>Authentication and Authorization</h3>
|
||||
<ul>
|
||||
<li>Implement multi-factor authentication (MFA)</li>
|
||||
<li>Use strong password policies</li>
|
||||
<li>Implement role-based access control (RBAC)</li>
|
||||
<li>Regularly review user permissions</li>
|
||||
<li>Use OAuth 2.0 for API authentication</li>
|
||||
</ul>
|
||||
|
||||
<h3>Supported Payment Methods</h3>
|
||||
<p>We accept all major credit cards, PayPal, and bank transfers.</p>''',
|
||||
'is_published': True,
|
||||
'is_featured': False,
|
||||
},
|
||||
{
|
||||
'title': 'Security Best Practices',
|
||||
'slug': 'security-best-practices',
|
||||
'category': KnowledgeBaseCategory.objects.filter(slug='security-privacy').first(),
|
||||
'summary': 'Essential security practices to keep your account safe.',
|
||||
'content': '''<h2>Account Security</h2>
|
||||
<p>Follow these best practices to keep your account secure.</p>
|
||||
<h3>Data Protection</h3>
|
||||
<ul>
|
||||
<li>Encrypt data at rest and in transit</li>
|
||||
<li>Implement proper key management</li>
|
||||
<li>Use secure communication protocols</li>
|
||||
<li>Implement data masking for sensitive information</li>
|
||||
<li>Regularly backup critical data</li>
|
||||
</ul>
|
||||
|
||||
<h3>Use Strong Passwords</h3>
|
||||
<p>Create complex passwords with a mix of letters, numbers, and symbols.</p>
|
||||
<h3>Network Security</h3>
|
||||
<ul>
|
||||
<li>Use firewalls and network segmentation</li>
|
||||
<li>Implement DDoS protection</li>
|
||||
<li>Use VPNs for remote access</li>
|
||||
<li>Monitor network traffic</li>
|
||||
<li>Implement intrusion detection systems</li>
|
||||
</ul>
|
||||
|
||||
<h3>Enable Two-Factor Authentication</h3>
|
||||
<p>Add an extra layer of security with 2FA.</p>
|
||||
|
||||
<h3>Regular Security Audits</h3>
|
||||
<p>Review your account activity regularly for any suspicious behavior.</p>
|
||||
|
||||
<h3>Keep Software Updated</h3>
|
||||
<p>Always use the latest version of our software for the best security.</p>''',
|
||||
<h3>Compliance and Auditing</h3>
|
||||
<ul>
|
||||
<li>Maintain security audit logs</li>
|
||||
<li>Regularly review access logs</li>
|
||||
<li>Conduct security assessments</li>
|
||||
<li>Stay compliant with regulations</li>
|
||||
<li>Document security procedures</li>
|
||||
</ul>''',
|
||||
'is_published': True,
|
||||
'is_featured': True,
|
||||
},
|
||||
{
|
||||
'title': 'Understanding Your Enterprise Billing',
|
||||
'slug': 'enterprise-billing-guide',
|
||||
'category': account_billing,
|
||||
'summary': 'Learn how enterprise billing works and how to manage your account.',
|
||||
'content': '''<h2>Enterprise Billing Guide</h2>
|
||||
<p>Understand your enterprise billing and manage your account effectively.</p>
|
||||
|
||||
<h3>Billing Structure</h3>
|
||||
<ul>
|
||||
<li>Service-based pricing models</li>
|
||||
<li>Monthly vs. annual billing options</li>
|
||||
<li>Usage-based charges</li>
|
||||
<li>Support tier pricing</li>
|
||||
<li>Additional service add-ons</li>
|
||||
</ul>
|
||||
|
||||
<h3>Payment Methods</h3>
|
||||
<ul>
|
||||
<li>Credit card payments</li>
|
||||
<li>Bank transfers</li>
|
||||
<li>Purchase orders</li>
|
||||
<li>Invoice-based billing</li>
|
||||
<li>Payment terms and schedules</li>
|
||||
</ul>
|
||||
|
||||
<h3>Managing Your Account</h3>
|
||||
<ul>
|
||||
<li>Update payment information</li>
|
||||
<li>View billing history</li>
|
||||
<li>Download invoices</li>
|
||||
<li>Manage service subscriptions</li>
|
||||
<li>Contact billing support</li>
|
||||
</ul>
|
||||
|
||||
<h3>Billing Support</h3>
|
||||
<p>For billing questions or issues, contact our billing team through the support portal or email billing@gnxsoft.com.</p>''',
|
||||
'is_published': True,
|
||||
'is_featured': False,
|
||||
},
|
||||
]
|
||||
|
||||
for article_data in articles:
|
||||
@@ -265,4 +695,3 @@ class Command(BaseCommand):
|
||||
self.stdout.write(self.style.SUCCESS(f' ✓ Created article: {article.title}'))
|
||||
else:
|
||||
self.stdout.write(f' - Article already exists: {article.title}')
|
||||
|
||||
|
||||
@@ -5,16 +5,54 @@ Handles automatic notifications when tickets are updated
|
||||
|
||||
from django.db.models.signals import post_save, pre_save
|
||||
from django.dispatch import receiver
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
from django.core.mail import EmailMultiAlternatives, get_connection
|
||||
from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
import logging
|
||||
import time
|
||||
|
||||
from .models import SupportTicket, TicketMessage, TicketActivity
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _send_email_with_retry(email_message, max_retries: int = 3, delay: float = 1.0) -> bool:
|
||||
"""
|
||||
Send email with retry logic for production reliability.
|
||||
Uses Django settings from .env file.
|
||||
|
||||
Args:
|
||||
email_message: EmailMultiAlternatives instance
|
||||
max_retries: Maximum number of retry attempts
|
||||
delay: Delay between retries in seconds
|
||||
|
||||
Returns:
|
||||
bool: True if email was sent successfully, False otherwise
|
||||
"""
|
||||
for attempt in range(max_retries + 1):
|
||||
try:
|
||||
# Test connection before sending (uses EMAIL_BACKEND from settings)
|
||||
connection = get_connection()
|
||||
connection.open()
|
||||
connection.close()
|
||||
|
||||
# Send the email (uses EMAIL_BACKEND and credentials from settings)
|
||||
email_message.send()
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"Email send attempt {attempt + 1} failed: {str(e)}")
|
||||
|
||||
if attempt < max_retries:
|
||||
time.sleep(delay * (2 ** attempt)) # Exponential backoff
|
||||
continue
|
||||
else:
|
||||
logger.error(f"Failed to send email after {max_retries + 1} attempts: {str(e)}")
|
||||
return False
|
||||
|
||||
return False
|
||||
|
||||
|
||||
class TicketUpdateNotifier:
|
||||
"""Service for sending ticket update notifications"""
|
||||
|
||||
@@ -34,6 +72,8 @@ class TicketUpdateNotifier:
|
||||
'status_color': ticket.status.color if ticket.status else '#3b82f6',
|
||||
'updated_at': ticket.updated_at.strftime('%B %d, %Y at %I:%M %p'),
|
||||
'support_url': f'{settings.SITE_URL}/support-center',
|
||||
'logo_url': f'{settings.SITE_URL}/images/logo.png',
|
||||
'site_url': settings.SITE_URL,
|
||||
}
|
||||
|
||||
# Render HTML email
|
||||
@@ -48,19 +88,24 @@ class TicketUpdateNotifier:
|
||||
context
|
||||
)
|
||||
|
||||
# Create email
|
||||
# Create email (uses DEFAULT_FROM_EMAIL from settings)
|
||||
email = EmailMultiAlternatives(
|
||||
subject=subject,
|
||||
body=text_message,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL, # From .env file
|
||||
to=[ticket.user_email],
|
||||
)
|
||||
|
||||
email.attach_alternative(html_message, "text/html")
|
||||
email.send(fail_silently=False)
|
||||
|
||||
# Send email with retry logic (uses EMAIL_BACKEND and credentials from settings)
|
||||
success = _send_email_with_retry(email)
|
||||
|
||||
if success:
|
||||
logger.info(f'Status change notification sent for ticket {ticket.ticket_number}')
|
||||
return True
|
||||
else:
|
||||
logger.error(f'Failed to send status change notification for ticket {ticket.ticket_number} after retries')
|
||||
return success
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to send status change notification: {str(e)}')
|
||||
@@ -85,6 +130,8 @@ class TicketUpdateNotifier:
|
||||
'message_author': message.author_name or 'Support Team',
|
||||
'created_at': message.created_at.strftime('%B %d, %Y at %I:%M %p'),
|
||||
'support_url': f'{settings.SITE_URL}/support-center',
|
||||
'logo_url': f'{settings.SITE_URL}/images/logo.png',
|
||||
'site_url': settings.SITE_URL,
|
||||
}
|
||||
|
||||
# Render HTML email
|
||||
@@ -99,19 +146,24 @@ class TicketUpdateNotifier:
|
||||
context
|
||||
)
|
||||
|
||||
# Create email
|
||||
# Create email (uses DEFAULT_FROM_EMAIL from settings)
|
||||
email = EmailMultiAlternatives(
|
||||
subject=subject,
|
||||
body=text_message,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL, # From .env file
|
||||
to=[ticket.user_email],
|
||||
)
|
||||
|
||||
email.attach_alternative(html_message, "text/html")
|
||||
email.send(fail_silently=False)
|
||||
|
||||
# Send email with retry logic (uses EMAIL_BACKEND and credentials from settings)
|
||||
success = _send_email_with_retry(email)
|
||||
|
||||
if success:
|
||||
logger.info(f'Message notification sent for ticket {ticket.ticket_number}')
|
||||
return True
|
||||
else:
|
||||
logger.error(f'Failed to send message notification for ticket {ticket.ticket_number} after retries')
|
||||
return success
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to send message notification: {str(e)}')
|
||||
@@ -131,6 +183,8 @@ class TicketUpdateNotifier:
|
||||
'assigned_to': assigned_to.get_full_name() or assigned_to.username,
|
||||
'updated_at': ticket.updated_at.strftime('%B %d, %Y at %I:%M %p'),
|
||||
'support_url': f'{settings.SITE_URL}/support-center',
|
||||
'logo_url': f'{settings.SITE_URL}/images/logo.png',
|
||||
'site_url': settings.SITE_URL,
|
||||
}
|
||||
|
||||
# Render HTML email
|
||||
@@ -145,19 +199,24 @@ class TicketUpdateNotifier:
|
||||
context
|
||||
)
|
||||
|
||||
# Create email
|
||||
# Create email (uses DEFAULT_FROM_EMAIL from settings)
|
||||
email = EmailMultiAlternatives(
|
||||
subject=subject,
|
||||
body=text_message,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL, # From .env file
|
||||
to=[ticket.user_email],
|
||||
)
|
||||
|
||||
email.attach_alternative(html_message, "text/html")
|
||||
email.send(fail_silently=False)
|
||||
|
||||
# Send email with retry logic (uses EMAIL_BACKEND and credentials from settings)
|
||||
success = _send_email_with_retry(email)
|
||||
|
||||
if success:
|
||||
logger.info(f'Assignment notification sent for ticket {ticket.ticket_number}')
|
||||
return True
|
||||
else:
|
||||
logger.error(f'Failed to send assignment notification for ticket {ticket.ticket_number} after retries')
|
||||
return success
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to send assignment notification: {str(e)}')
|
||||
|
||||
@@ -5,111 +5,294 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Ticket Assigned</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333333;
|
||||
background-color: #f4f4f4;
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.email-container {
|
||||
max-width: 600px;
|
||||
margin: 20px auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);
|
||||
color: #ffffff;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
.email-header h1 {
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.7;
|
||||
color: #2c3e50;
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
|
||||
.email-wrapper {
|
||||
max-width: 650px;
|
||||
margin: 0 auto;
|
||||
background: #ffffff;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 50%, #6d28d9 100%);
|
||||
padding: 50px 40px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.email-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
right: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.15) 0%, transparent 70%);
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
color: #ffffff;
|
||||
font-size: 32px;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
letter-spacing: -0.5px;
|
||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 50px 40px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.greeting {
|
||||
font-size: 18px;
|
||||
color: #1e293b;
|
||||
margin-bottom: 30px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.intro-text {
|
||||
font-size: 16px;
|
||||
color: #475569;
|
||||
line-height: 1.8;
|
||||
margin-bottom: 35px;
|
||||
}
|
||||
|
||||
.ticket-info {
|
||||
background: linear-gradient(135deg, rgba(218, 165, 32, 0.08) 0%, rgba(218, 165, 32, 0.03) 100%);
|
||||
border: 2px solid rgba(218, 165, 32, 0.2);
|
||||
border-left: 5px solid #daa520;
|
||||
padding: 25px;
|
||||
margin: 35px 0;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 20px rgba(218, 165, 32, 0.1);
|
||||
}
|
||||
|
||||
.ticket-info strong {
|
||||
color: #475569;
|
||||
font-size: 14px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
display: block;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.ticket-info span {
|
||||
color: #1e293b;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.email-body {
|
||||
padding: 40px 30px;
|
||||
}
|
||||
.ticket-info {
|
||||
background: linear-gradient(135deg, rgba(218, 165, 32, 0.1) 0%, rgba(218, 165, 32, 0.05) 100%);
|
||||
border-left: 4px solid #daa520;
|
||||
padding: 20px;
|
||||
margin: 25px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.assignment-box {
|
||||
background: linear-gradient(135deg, rgba(139, 92, 246, 0.1) 0%, rgba(139, 92, 246, 0.05) 100%);
|
||||
border-left: 4px solid #8b5cf6;
|
||||
padding: 20px;
|
||||
margin: 25px 0;
|
||||
border-radius: 4px;
|
||||
border: 2px solid rgba(139, 92, 246, 0.2);
|
||||
border-left: 5px solid #8b5cf6;
|
||||
padding: 35px;
|
||||
margin: 35px 0;
|
||||
border-radius: 12px;
|
||||
text-align: center;
|
||||
box-shadow: 0 4px 20px rgba(139, 92, 246, 0.15);
|
||||
}
|
||||
|
||||
.assignment-box h3 {
|
||||
margin: 0 0 20px 0;
|
||||
color: #1e293b;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.assigned-name {
|
||||
font-size: 28px;
|
||||
font-weight: 800;
|
||||
color: #8b5cf6;
|
||||
margin: 15px 0;
|
||||
text-shadow: 0 2px 4px rgba(139, 92, 246, 0.2);
|
||||
}
|
||||
|
||||
.assignment-time {
|
||||
color: #64748b;
|
||||
font-size: 13px;
|
||||
margin-top: 15px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.cta-container {
|
||||
text-align: center;
|
||||
margin: 45px 0;
|
||||
}
|
||||
|
||||
.cta-button {
|
||||
display: inline-block;
|
||||
background: linear-gradient(135deg, #daa520, #d4af37);
|
||||
background: linear-gradient(135deg, #daa520 0%, #d4af37 100%);
|
||||
color: #ffffff !important;
|
||||
text-decoration: none;
|
||||
padding: 14px 32px;
|
||||
border-radius: 6px;
|
||||
font-weight: 600;
|
||||
margin: 20px 0;
|
||||
padding: 18px 40px;
|
||||
border-radius: 10px;
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
letter-spacing: 0.5px;
|
||||
box-shadow: 0 8px 25px rgba(218, 165, 32, 0.4);
|
||||
transition: all 0.3s ease;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.footer {
|
||||
background-color: #f8f8f8;
|
||||
padding: 25px 30px;
|
||||
text-align: center;
|
||||
|
||||
.cta-button:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 12px 35px rgba(218, 165, 32, 0.5);
|
||||
}
|
||||
|
||||
.info-note {
|
||||
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
|
||||
border-left: 4px solid #8b5cf6;
|
||||
padding: 20px 25px;
|
||||
border-radius: 8px;
|
||||
margin-top: 35px;
|
||||
color: #475569;
|
||||
font-size: 14px;
|
||||
color: #666666;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.email-footer {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
||||
padding: 40px;
|
||||
text-align: center;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
.footer-company {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.footer-tagline {
|
||||
font-size: 14px;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
margin: 25px 0;
|
||||
padding-top: 25px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
color: #daa520;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.footer-links a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.footer-note {
|
||||
font-size: 12px;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
margin-top: 25px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
body {
|
||||
padding: 20px 10px;
|
||||
}
|
||||
|
||||
.email-header {
|
||||
padding: 40px 25px;
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 35px 25px;
|
||||
}
|
||||
|
||||
.assigned-name {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.cta-button {
|
||||
padding: 16px 30px;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="email-container">
|
||||
<div class="email-wrapper">
|
||||
<div class="email-header">
|
||||
<h1>👤 Ticket Assigned</h1>
|
||||
</div>
|
||||
|
||||
<div class="email-body">
|
||||
<p>Dear {{ user_name }},</p>
|
||||
<div class="greeting">Dear {{ user_name }},</div>
|
||||
|
||||
<p>Your support ticket has been assigned to a team member who will be assisting you.</p>
|
||||
<div class="intro-text">
|
||||
Your support ticket has been assigned to a team member who will be assisting you with your request.
|
||||
</div>
|
||||
|
||||
<div class="ticket-info">
|
||||
<strong>Ticket:</strong> {{ ticket_number }}<br>
|
||||
<strong>Subject:</strong> {{ title }}
|
||||
<strong>Ticket Number</strong>
|
||||
<span>{{ ticket_number }}</span>
|
||||
<br><br>
|
||||
<strong>Subject</strong>
|
||||
<span>{{ title }}</span>
|
||||
</div>
|
||||
|
||||
<div class="assignment-box">
|
||||
<h3 style="margin-top: 0;">Assigned To</h3>
|
||||
<div style="font-size: 18px; font-weight: 700; color: #8b5cf6;">{{ assigned_to }}</div>
|
||||
<p style="margin-top: 10px; color: #666; font-size: 14px;">{{ updated_at }}</p>
|
||||
<h3>Assigned To</h3>
|
||||
<div class="assigned-name">{{ assigned_to }}</div>
|
||||
<div class="assignment-time">{{ updated_at }}</div>
|
||||
</div>
|
||||
|
||||
<div style="text-align: center; margin: 30px 0;">
|
||||
<div class="cta-container">
|
||||
<a href="{{ support_url }}" class="cta-button">View Ticket Details</a>
|
||||
</div>
|
||||
|
||||
<p style="color: #666;">
|
||||
<div class="info-note">
|
||||
Your assigned support agent will review your ticket and respond as soon as possible.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p style="margin: 0 0 10px 0;">
|
||||
<strong>GNX Software Solutions</strong><br>
|
||||
Enterprise Support Center
|
||||
</p>
|
||||
<p style="margin: 0; font-size: 12px;">
|
||||
<div class="email-footer">
|
||||
<div class="footer-company">GNX Software Solutions</div>
|
||||
<div class="footer-tagline">Enterprise Support Center</div>
|
||||
|
||||
<div class="footer-links">
|
||||
<a href="{{ support_url }}">Visit Support Center</a>
|
||||
</div>
|
||||
|
||||
<div class="footer-note">
|
||||
This is an automated notification. For assistance, visit our <a href="{{ support_url }}" style="color: #daa520;">Support Center</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -5,121 +5,357 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Support Ticket Confirmation</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333333;
|
||||
background-color: #f4f4f4;
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.email-container {
|
||||
max-width: 600px;
|
||||
margin: 20px auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
||||
color: #ffffff;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
.email-header h1 {
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.7;
|
||||
color: #2c3e50;
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
.email-body {
|
||||
padding: 40px 30px;
|
||||
|
||||
.email-wrapper {
|
||||
max-width: 650px;
|
||||
margin: 0 auto;
|
||||
background: #ffffff;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.ticket-number-box {
|
||||
background: linear-gradient(135deg, rgba(218, 165, 32, 0.1) 0%, rgba(218, 165, 32, 0.05) 100%);
|
||||
border-left: 4px solid #daa520;
|
||||
padding: 20px;
|
||||
margin: 25px 0;
|
||||
border-radius: 4px;
|
||||
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #334155 100%);
|
||||
padding: 50px 40px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.ticket-number {
|
||||
font-size: 24px;
|
||||
|
||||
.email-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
right: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(circle, rgba(218, 165, 32, 0.1) 0%, transparent 70%);
|
||||
animation: pulse 8s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { transform: scale(1); opacity: 0.5; }
|
||||
50% { transform: scale(1.1); opacity: 0.8; }
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
color: #ffffff;
|
||||
font-size: 32px;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
letter-spacing: -0.5px;
|
||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.email-header .subtitle {
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
font-size: 16px;
|
||||
margin-top: 12px;
|
||||
font-weight: 300;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 50px 40px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.greeting {
|
||||
font-size: 18px;
|
||||
color: #1e293b;
|
||||
margin-bottom: 30px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.intro-text {
|
||||
font-size: 16px;
|
||||
color: #475569;
|
||||
line-height: 1.8;
|
||||
margin-bottom: 35px;
|
||||
}
|
||||
|
||||
.ticket-number-box {
|
||||
background: linear-gradient(135deg, rgba(218, 165, 32, 0.08) 0%, rgba(218, 165, 32, 0.03) 100%);
|
||||
border: 2px solid rgba(218, 165, 32, 0.2);
|
||||
border-left: 5px solid #daa520;
|
||||
padding: 30px;
|
||||
margin: 35px 0;
|
||||
border-radius: 12px;
|
||||
text-align: center;
|
||||
box-shadow: 0 4px 20px rgba(218, 165, 32, 0.1);
|
||||
}
|
||||
|
||||
.ticket-label {
|
||||
font-size: 13px;
|
||||
color: #64748b;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1.5px;
|
||||
font-weight: 600;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.ticket-number {
|
||||
font-size: 36px;
|
||||
font-weight: 800;
|
||||
color: #daa520;
|
||||
font-family: 'Courier New', monospace;
|
||||
letter-spacing: 1px;
|
||||
letter-spacing: 2px;
|
||||
text-shadow: 0 2px 4px rgba(218, 165, 32, 0.2);
|
||||
}
|
||||
|
||||
.ticket-hint {
|
||||
font-size: 13px;
|
||||
color: #94a3b8;
|
||||
margin-top: 12px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
margin: 25px 0;
|
||||
margin: 40px 0;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
color: #0f172a;
|
||||
margin-bottom: 25px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 2px solid #e2e8f0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.section-title::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -2px;
|
||||
left: 0;
|
||||
width: 60px;
|
||||
height: 2px;
|
||||
background: linear-gradient(90deg, #daa520, #d4af37);
|
||||
}
|
||||
|
||||
.info-row {
|
||||
padding: 12px 0;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
padding: 18px 0;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.info-row:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
font-weight: 600;
|
||||
color: #555555;
|
||||
display: inline-block;
|
||||
width: 120px;
|
||||
}
|
||||
.info-value {
|
||||
color: #333333;
|
||||
}
|
||||
.cta-button {
|
||||
display: inline-block;
|
||||
background: linear-gradient(135deg, #daa520, #d4af37);
|
||||
color: #ffffff !important;
|
||||
text-decoration: none;
|
||||
padding: 14px 32px;
|
||||
border-radius: 6px;
|
||||
font-weight: 600;
|
||||
margin: 20px 0;
|
||||
text-align: center;
|
||||
}
|
||||
.footer {
|
||||
background-color: #f8f8f8;
|
||||
padding: 25px 30px;
|
||||
text-align: center;
|
||||
color: #475569;
|
||||
min-width: 130px;
|
||||
font-size: 14px;
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
color: #1e293b;
|
||||
flex: 1;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.status-badge {
|
||||
display: inline-block;
|
||||
padding: 4px 12px;
|
||||
border-radius: 12px;
|
||||
padding: 6px 16px;
|
||||
border-radius: 20px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
background-color: #3b82f6;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
background: linear-gradient(135deg, #3b82f6, #2563eb);
|
||||
color: white;
|
||||
box-shadow: 0 2px 8px rgba(59, 130, 246, 0.3);
|
||||
}
|
||||
|
||||
.description-box {
|
||||
background: #f8fafc;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-left: 4px solid #daa520;
|
||||
padding: 25px;
|
||||
border-radius: 8px;
|
||||
white-space: pre-wrap;
|
||||
font-size: 15px;
|
||||
line-height: 1.8;
|
||||
color: #334155;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.cta-container {
|
||||
text-align: center;
|
||||
margin: 45px 0;
|
||||
}
|
||||
|
||||
.cta-button {
|
||||
display: inline-block;
|
||||
background: linear-gradient(135deg, #daa520 0%, #d4af37 100%);
|
||||
color: #ffffff !important;
|
||||
text-decoration: none;
|
||||
padding: 18px 40px;
|
||||
border-radius: 10px;
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
letter-spacing: 0.5px;
|
||||
box-shadow: 0 8px 25px rgba(218, 165, 32, 0.4);
|
||||
transition: all 0.3s ease;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.cta-button:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 12px 35px rgba(218, 165, 32, 0.5);
|
||||
}
|
||||
|
||||
.next-steps {
|
||||
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
|
||||
border-left: 4px solid #3b82f6;
|
||||
padding: 25px;
|
||||
border-radius: 8px;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.next-steps strong {
|
||||
color: #0f172a;
|
||||
font-size: 16px;
|
||||
display: block;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.next-steps p {
|
||||
color: #475569;
|
||||
font-size: 15px;
|
||||
line-height: 1.7;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.email-footer {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
||||
padding: 40px;
|
||||
text-align: center;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
.footer-company {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.footer-tagline {
|
||||
font-size: 14px;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
margin: 25px 0;
|
||||
padding-top: 25px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
color: #daa520;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.footer-links a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.footer-note {
|
||||
font-size: 12px;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
margin-top: 25px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
body {
|
||||
padding: 20px 10px;
|
||||
}
|
||||
|
||||
.email-header {
|
||||
padding: 40px 25px;
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 35px 25px;
|
||||
}
|
||||
|
||||
.ticket-number {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
min-width: auto;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.cta-button {
|
||||
padding: 16px 30px;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="email-container">
|
||||
<div class="email-wrapper">
|
||||
<!-- Header -->
|
||||
<div class="email-header">
|
||||
<h1>✓ Support Ticket Created</h1>
|
||||
<h1>✓ Ticket Created Successfully</h1>
|
||||
<div class="subtitle">Your support request has been received</div>
|
||||
</div>
|
||||
|
||||
<!-- Body -->
|
||||
<div class="email-body">
|
||||
<p>Dear {{ user_name }},</p>
|
||||
<div class="greeting">Dear {{ user_name }},</div>
|
||||
|
||||
<p>Thank you for contacting our support team. We've received your support request and our team will respond as soon as possible.</p>
|
||||
<div class="intro-text">
|
||||
Thank you for contacting our support team. We've received your support request and our team will respond as soon as possible. Your ticket has been created and assigned a unique reference number.
|
||||
</div>
|
||||
|
||||
<!-- Ticket Number Box -->
|
||||
<div class="ticket-number-box">
|
||||
<div style="font-size: 14px; color: #666; margin-bottom: 8px;">Your Ticket Number</div>
|
||||
<div class="ticket-label">Your Ticket Number</div>
|
||||
<div class="ticket-number">{{ ticket_number }}</div>
|
||||
<div style="font-size: 13px; color: #666; margin-top: 8px;">Please save this number for future reference</div>
|
||||
<div class="ticket-hint">Please save this number for future reference</div>
|
||||
</div>
|
||||
|
||||
<!-- Ticket Details -->
|
||||
<div class="info-section">
|
||||
<h3 style="color: #0f172a; margin-bottom: 15px;">Ticket Details</h3>
|
||||
<h3 class="section-title">Ticket Details</h3>
|
||||
|
||||
<div class="info-row">
|
||||
<span class="info-label">Subject:</span>
|
||||
@@ -143,7 +379,7 @@
|
||||
|
||||
<div class="info-row">
|
||||
<span class="info-label">Status:</span>
|
||||
<span class="status-badge">{{ status }}</span>
|
||||
<span class="info-value"><span class="status-badge">{{ status }}</span></span>
|
||||
</div>
|
||||
|
||||
<div class="info-row">
|
||||
@@ -154,33 +390,36 @@
|
||||
|
||||
<!-- Description -->
|
||||
<div class="info-section">
|
||||
<h3 style="color: #0f172a; margin-bottom: 15px;">Description</h3>
|
||||
<div style="background-color: #f8f8f8; padding: 15px; border-radius: 4px; white-space: pre-wrap;">{{ description }}</div>
|
||||
<h3 class="section-title">Description</h3>
|
||||
<div class="description-box">{{ description }}</div>
|
||||
</div>
|
||||
|
||||
<!-- CTA Button -->
|
||||
<div style="text-align: center; margin: 30px 0;">
|
||||
<a href="{{ support_url }}" class="cta-button">Check Ticket Status</a>
|
||||
<div class="cta-container">
|
||||
<a href="{{ support_url }}" class="cta-button">View Ticket Status</a>
|
||||
</div>
|
||||
|
||||
<p style="margin-top: 30px; color: #666;">
|
||||
<strong>What happens next?</strong><br>
|
||||
Our support team will review your ticket and respond within our standard SLA timeframe. You'll receive an email notification when there's an update.
|
||||
</p>
|
||||
<!-- Next Steps -->
|
||||
<div class="next-steps">
|
||||
<strong>What happens next?</strong>
|
||||
<p>Our support team will review your ticket and respond within our standard SLA timeframe. You'll receive an email notification when there's an update on your ticket.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<p style="margin: 0 0 10px 0;">
|
||||
<strong>GNX Software Solutions</strong><br>
|
||||
Enterprise Support Center
|
||||
</p>
|
||||
<p style="margin: 0; font-size: 12px;">
|
||||
<div class="email-footer">
|
||||
<div class="footer-company">GNX Software Solutions</div>
|
||||
<div class="footer-tagline">Enterprise Support Center</div>
|
||||
|
||||
<div class="footer-links">
|
||||
<a href="{{ support_url }}">Visit Support Center</a>
|
||||
</div>
|
||||
|
||||
<div class="footer-note">
|
||||
This is an automated message. Please do not reply directly to this email.<br>
|
||||
For assistance, please visit our <a href="{{ support_url }}" style="color: #daa520;">Support Center</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -5,120 +5,297 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>New Response on Your Ticket</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333333;
|
||||
background-color: #f4f4f4;
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.email-container {
|
||||
max-width: 600px;
|
||||
margin: 20px auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #10b981 0%, #059669 100%);
|
||||
color: #ffffff;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
.email-header h1 {
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.7;
|
||||
color: #2c3e50;
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
|
||||
.email-wrapper {
|
||||
max-width: 650px;
|
||||
margin: 0 auto;
|
||||
background: #ffffff;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #10b981 0%, #059669 50%, #047857 100%);
|
||||
padding: 50px 40px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.email-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
right: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.15) 0%, transparent 70%);
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
color: #ffffff;
|
||||
font-size: 32px;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
letter-spacing: -0.5px;
|
||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 50px 40px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.greeting {
|
||||
font-size: 18px;
|
||||
color: #1e293b;
|
||||
margin-bottom: 30px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.intro-text {
|
||||
font-size: 16px;
|
||||
color: #475569;
|
||||
line-height: 1.8;
|
||||
margin-bottom: 35px;
|
||||
}
|
||||
|
||||
.ticket-info {
|
||||
background: linear-gradient(135deg, rgba(218, 165, 32, 0.08) 0%, rgba(218, 165, 32, 0.03) 100%);
|
||||
border: 2px solid rgba(218, 165, 32, 0.2);
|
||||
border-left: 5px solid #daa520;
|
||||
padding: 25px;
|
||||
margin: 35px 0;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 20px rgba(218, 165, 32, 0.1);
|
||||
}
|
||||
|
||||
.ticket-info strong {
|
||||
color: #475569;
|
||||
font-size: 14px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
display: block;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.ticket-info span {
|
||||
color: #1e293b;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.email-body {
|
||||
padding: 40px 30px;
|
||||
}
|
||||
.ticket-info {
|
||||
background: linear-gradient(135deg, rgba(218, 165, 32, 0.1) 0%, rgba(218, 165, 32, 0.05) 100%);
|
||||
border-left: 4px solid #daa520;
|
||||
padding: 20px;
|
||||
margin: 25px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.message-box {
|
||||
background: #f8f9fa;
|
||||
border-left: 4px solid #10b981;
|
||||
padding: 20px;
|
||||
margin: 25px 0;
|
||||
border-radius: 4px;
|
||||
background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);
|
||||
border: 2px solid rgba(16, 185, 129, 0.2);
|
||||
border-left: 5px solid #10b981;
|
||||
padding: 30px;
|
||||
margin: 35px 0;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 20px rgba(16, 185, 129, 0.1);
|
||||
}
|
||||
|
||||
.message-author {
|
||||
font-weight: 700;
|
||||
color: #10b981;
|
||||
margin-bottom: 10px;
|
||||
color: #059669;
|
||||
margin-bottom: 15px;
|
||||
font-size: 16px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.message-author::before {
|
||||
content: '👤';
|
||||
margin-right: 10px;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.message-content {
|
||||
color: #333;
|
||||
color: #1e293b;
|
||||
white-space: pre-wrap;
|
||||
line-height: 1.8;
|
||||
line-height: 1.9;
|
||||
font-size: 15px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.message-time {
|
||||
color: #64748b;
|
||||
font-size: 13px;
|
||||
font-style: italic;
|
||||
margin-top: 15px;
|
||||
padding-top: 15px;
|
||||
border-top: 1px solid rgba(16, 185, 129, 0.2);
|
||||
}
|
||||
|
||||
.cta-container {
|
||||
text-align: center;
|
||||
margin: 45px 0;
|
||||
}
|
||||
|
||||
.cta-button {
|
||||
display: inline-block;
|
||||
background: linear-gradient(135deg, #daa520, #d4af37);
|
||||
background: linear-gradient(135deg, #daa520 0%, #d4af37 100%);
|
||||
color: #ffffff !important;
|
||||
text-decoration: none;
|
||||
padding: 14px 32px;
|
||||
border-radius: 6px;
|
||||
font-weight: 600;
|
||||
margin: 20px 0;
|
||||
padding: 18px 40px;
|
||||
border-radius: 10px;
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
letter-spacing: 0.5px;
|
||||
box-shadow: 0 8px 25px rgba(218, 165, 32, 0.4);
|
||||
transition: all 0.3s ease;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.footer {
|
||||
background-color: #f8f8f8;
|
||||
padding: 25px 30px;
|
||||
text-align: center;
|
||||
|
||||
.cta-button:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 12px 35px rgba(218, 165, 32, 0.5);
|
||||
}
|
||||
|
||||
.info-note {
|
||||
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
|
||||
border-left: 4px solid #3b82f6;
|
||||
padding: 20px 25px;
|
||||
border-radius: 8px;
|
||||
margin-top: 35px;
|
||||
color: #475569;
|
||||
font-size: 14px;
|
||||
color: #666666;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.email-footer {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
||||
padding: 40px;
|
||||
text-align: center;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
.footer-company {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.footer-tagline {
|
||||
font-size: 14px;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
margin: 25px 0;
|
||||
padding-top: 25px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
color: #daa520;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.footer-links a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.footer-note {
|
||||
font-size: 12px;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
margin-top: 25px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
body {
|
||||
padding: 20px 10px;
|
||||
}
|
||||
|
||||
.email-header {
|
||||
padding: 40px 25px;
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 35px 25px;
|
||||
}
|
||||
|
||||
.cta-button {
|
||||
padding: 16px 30px;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="email-container">
|
||||
<div class="email-wrapper">
|
||||
<div class="email-header">
|
||||
<h1>💬 New Response on Your Ticket</h1>
|
||||
</div>
|
||||
|
||||
<div class="email-body">
|
||||
<p>Dear {{ user_name }},</p>
|
||||
<div class="greeting">Dear {{ user_name }},</div>
|
||||
|
||||
<p>Our support team has responded to your ticket.</p>
|
||||
<div class="intro-text">
|
||||
Our support team has responded to your ticket. You can view the complete conversation and reply below.
|
||||
</div>
|
||||
|
||||
<div class="ticket-info">
|
||||
<strong>Ticket:</strong> {{ ticket_number }}<br>
|
||||
<strong>Subject:</strong> {{ title }}
|
||||
<strong>Ticket Number</strong>
|
||||
<span>{{ ticket_number }}</span>
|
||||
<br><br>
|
||||
<strong>Subject</strong>
|
||||
<span>{{ title }}</span>
|
||||
</div>
|
||||
|
||||
<div class="message-box">
|
||||
<div class="message-author">{{ message_author }} replied:</div>
|
||||
<div class="message-content">{{ message }}</div>
|
||||
<div style="margin-top: 15px; color: #666; font-size: 13px;">{{ created_at }}</div>
|
||||
<div class="message-time">{{ created_at }}</div>
|
||||
</div>
|
||||
|
||||
<div style="text-align: center; margin: 30px 0;">
|
||||
<div class="cta-container">
|
||||
<a href="{{ support_url }}" class="cta-button">View Full Conversation</a>
|
||||
</div>
|
||||
|
||||
<p style="color: #666;">
|
||||
<div class="info-note">
|
||||
You can view the complete ticket history and reply to this message in the Support Center.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p style="margin: 0 0 10px 0;">
|
||||
<strong>GNX Software Solutions</strong><br>
|
||||
Enterprise Support Center
|
||||
</p>
|
||||
<p style="margin: 0; font-size: 12px;">
|
||||
<div class="email-footer">
|
||||
<div class="footer-company">GNX Software Solutions</div>
|
||||
<div class="footer-tagline">Enterprise Support Center</div>
|
||||
|
||||
<div class="footer-links">
|
||||
<a href="{{ support_url }}">Visit Support Center</a>
|
||||
</div>
|
||||
|
||||
<div class="footer-note">
|
||||
This is an automated notification. For assistance, visit our <a href="{{ support_url }}" style="color: #daa520;">Support Center</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||