Compare commits
5 commits
e82f563ca3
...
9ce96674c0
Author | SHA1 | Date | |
---|---|---|---|
9ce96674c0 | |||
1105fc7605 | |||
31844f1b13 | |||
15293dfa11 | |||
1daa288cdd |
21 changed files with 88 additions and 39 deletions
|
@ -137,11 +137,19 @@ class ServiceOfferingAdmin(admin.ModelAdmin):
|
|||
|
||||
|
||||
@admin.register(ConsultingPartner)
|
||||
class ConsultingPartnerAdmin(admin.ModelAdmin):
|
||||
list_display = ("name", "website", "logo_preview", "disable_listing", "is_featured")
|
||||
class ConsultingPartnerAdmin(SortableAdminMixin, admin.ModelAdmin):
|
||||
list_display = (
|
||||
"name",
|
||||
"website",
|
||||
"logo_preview",
|
||||
"disable_listing",
|
||||
"is_featured",
|
||||
"order",
|
||||
)
|
||||
search_fields = ("name", "description")
|
||||
prepopulated_fields = {"slug": ("name",)}
|
||||
filter_horizontal = ("services", "cloud_providers")
|
||||
ordering = ("order",)
|
||||
|
||||
def logo_preview(self, obj):
|
||||
if obj.logo:
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
# Generated by Django 5.1.5 on 2025-03-14 13:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("services", "0020_alter_cloudprovider_options_cloudprovider_order"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name="consultingpartner",
|
||||
options={"ordering": ["order"]},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="consultingpartner",
|
||||
name="order",
|
||||
field=models.IntegerField(default=0),
|
||||
),
|
||||
]
|
|
@ -183,12 +183,16 @@ class ConsultingPartner(models.Model):
|
|||
CloudProvider, related_name="consulting_partners", blank=True
|
||||
)
|
||||
|
||||
order = models.IntegerField(default=0)
|
||||
is_featured = models.BooleanField(default=False)
|
||||
disable_listing = models.BooleanField(default=False)
|
||||
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ["order"]
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Bad Request (400){% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Page Not Found (404){% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Server Error (500){% endblock %}
|
||||
|
|
|
@ -24,6 +24,16 @@
|
|||
</head>
|
||||
<body>
|
||||
<div class="overflow-hidden">
|
||||
<!-- Announcement Bar -->
|
||||
<div class="bg-primary text-white py-2 text-center">
|
||||
<div class="container">
|
||||
<a href="https://www.vshn.ch/en/blog/vshn-launches-servala-open-cloud-native-service-hub/" class="text-white text-decoration-none" target="_blank">
|
||||
VSHN launches Servala – Open Cloud Native Service Hub
|
||||
</a>
|
||||
<i class="bi bi-box-arrow-up-right"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<header x-data="{sideNav: false, atTop: true}" class="site-header position-relative">
|
||||
<div class="header-nav" :class="{ 'header-nav--top': atTop, 'header-nav--fixed': !atTop }"
|
||||
x-on:scroll.window="atTop = (window.pageYOffset > 200) ? false : true;">
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
{% load contact_tags %}
|
||||
|
||||
|
@ -26,9 +26,9 @@
|
|||
<h2 class="fs-32 fw-semibold mb-12">Overview</h2>
|
||||
</header>
|
||||
<div class="text-gray-500 fs-19 lh-1-7">
|
||||
<p>Servala connects businesses, developers, and cloud service providers on one unique hub with secure, scalable, and easy-to-use cloud-native services.</p>
|
||||
<p>Servala connects businesses, developers, and cloud providers on one unified hub, offering secure, scalable, and easy-to-use cloud-native services and applications.</p>
|
||||
<p>With Servala, businesses can seamlessly access and deploy a vast range of software, databases, applications, and DevOps tools such as PostgreSQL, Red Hat OpenShift, Keycloak, GitLab or Forgejo across multiple cloud providers and regions. This ensures businesses can seamlessly access and deploy services, applications, and DevOps tools across different cloud environments without being tied to a single provider.</p>
|
||||
<p>With Servala, businesses can stay agile, avoid vendor lock-in, optimize cloud costs, and ensure security and compliance. For Independent Software Vendors (ISVs), Servala opens up additional channels to offer their software products. At the same time, Cloud Service Providers (CSPs) can add value on top of their existing core offerings (compute, storage, network).</p>
|
||||
<p>Servala helps businesses stay agile and independent, reduce cloud costs, and ensure security and compliance. For Software Vendors, Servala opens up additional channels to offer their software products. At the same time, Cloud Providers can add value on top of their existing core offerings through Servala.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-action">
|
||||
|
@ -46,30 +46,31 @@
|
|||
<div>
|
||||
<h2 class="fs-32 fw-semibold mt-3">Who benefits from using Servala?</h2>
|
||||
<div class="text-gray-500 fs-19 lh-1-7">
|
||||
<p>Servala is designed for CSPs, ISVs, and Enterprises and their users, enabling them to offer, integrate, and consume cloud-native services and applications and DevOps tools with ease. It bridges the gap between CSPs seeking value-added services, ISVs looking to distribute and monetize their applications and services, and Enterprises needing scalable, secure, and cost-efficient cloud solutions and their users who need to access those services easily - all within an open, cloud-agnostic ecosystem.</p>
|
||||
<p>Servala is designed for Software Vendors, Cloud Providers and Enterprises and their users, enabling them to offer, integrate, and consume cloud-native services and applications and DevOps tools with ease.</p>
|
||||
<p>For <strong>Software Vendors</strong>, Servala provides a powerful channel to distribute, monetize, and operate their software as managed services. <strong>Cloud Providers</strong> can extend their core infrastructure offerings with value-added services. <strong>Enterprise Private Clouds</strong> gain seamless access to trusted services and applications while maintaining full control over security and compliance - all within an open and agnostic ecosystem.</p>
|
||||
</div>
|
||||
<article class="pt-20">
|
||||
<h3 class="fs-24 fw-semibold">Independent Software Vendors (ISVs)</h3>
|
||||
<h3 class="fs-24 fw-semibold">Software Vendors</h3>
|
||||
<ul class="list-disc pl-8 text-gray-500 fs-19">
|
||||
<li>Transform applications into SaaS offerings.</li>
|
||||
<li>Leverage the Servala Hub to distribute, monetize, and efficiently operate your software.</li>
|
||||
<li>Extend your reach to new markets and ecosystems.</li>
|
||||
<li>Transform software into SaaS offerings.</li>
|
||||
<li>Reach new markets and ecosystems through our existing partner network.</li>
|
||||
<li>Streamline operations and monetization.</li>
|
||||
</ul>
|
||||
</article>
|
||||
<article class="pt-20">
|
||||
<h3 class="fs-24 fw-semibold">Cloud Service Providers (CSPs)</h3>
|
||||
<h3 class="fs-24 fw-semibold">Cloud Providers</h3>
|
||||
<ul class="list-disc pl-8 text-gray-500 fs-19">
|
||||
<li>Offer value-added services and applications to end users.</li>
|
||||
<li>Respond effectively to fast-paced market changes.</li>
|
||||
<li>Gain tools to enhance operational efficiency and market relevance.</li>
|
||||
<li>Offer value-added services and applications to customers.</li>
|
||||
<li>Enhance operational efficiency and market reach.</li>
|
||||
<li>Keep pace with fast-changing industry demands.</li>
|
||||
</ul>
|
||||
</article>
|
||||
<article class="pt-20">
|
||||
<h3 class="fs-24 fw-semibold">Enterprises and Their Users</h3>
|
||||
<h3 class="fs-24 fw-semibold">Enterprise Private Clouds</h3>
|
||||
<ul class="list-disc pl-8 text-gray-500 fs-19">
|
||||
<li>Access scalable, secure, and cost-efficient services.</li>
|
||||
<li>Enable self-service installation of trusted applications without managing infrastructure.</li>
|
||||
<li>Benefit from built-in compliance, developer productivity boosts, and operational simplicity.</li>
|
||||
<li>Ensure compliance, boost developer productivity, and simplify operations.</li>
|
||||
</ul>
|
||||
</article>
|
||||
</div>
|
||||
|
@ -84,8 +85,7 @@
|
|||
<i class="bi bi-lightning-charge-fill fs-2 text-primary me-3"></i>
|
||||
<h3 class="fs-24 fw-semibold card-title mb-0">Agility & Faster Time-to-Market</h3>
|
||||
</div>
|
||||
<p class="text-gray-500 fs-19 card-text">Access a vast catalog of services and applications for rapid deployment and
|
||||
innovation.</p>
|
||||
<p class="text-gray-500 fs-19 card-text">Access a vast catalog of services and applications for rapid deployment and innovation.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -94,10 +94,9 @@
|
|||
<div class="card-body">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<i class="bi bi-cloud-check-fill fs-2 text-primary me-3"></i>
|
||||
<h3 class="fs-24 fw-semibold card-title mb-0">Cloud-Agnostic & Vendor-Independent</h3>
|
||||
<h3 class="fs-24 fw-semibold card-title mb-0">Sovereign & Open</h3>
|
||||
</div>
|
||||
<p class="text-gray-500 fs-19 card-text">Deploy services on any cloud or on-premises, ensuring maximum
|
||||
flexibility.</p>
|
||||
<p class="text-gray-500 fs-19 card-text">Deploy services on any cloud or on-premises, ensuring maximum flexibility.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Open Cloud Native Services Hub{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load contact_tags %}
|
||||
|
||||
{% block title %}Contact Us{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load form_tags %}
|
||||
|
||||
{% block title %}Contact Us{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}{{ offering.service.name }} on {{ offering.cloud_provider.name }}{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block title %}Service Offerings{% endblock %}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load contact_tags %}
|
||||
|
||||
{% block title %}Consulting Partner {{ partner.name }}{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
{% load contact_tags %}
|
||||
|
||||
|
@ -120,6 +120,9 @@
|
|||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<h3 class="card__title">
|
||||
<a href="{{ partner.get_absolute_url }}" class="text-decoration-none">{{ partner.name }}</a>
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="card__desc flex-grow-1 rich-text-content">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load contact_tags %}
|
||||
|
||||
{% block title %}Service Provider {{ provider.name }}{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
{% load contact_tags %}
|
||||
|
||||
|
@ -103,6 +103,9 @@
|
|||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<h3 class="card__title">
|
||||
<a href="{{ provider.get_absolute_url }}" class="text-decoration-none">{{ provider.name }}</a>
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="card__desc flex-grow-1 rich-text-content">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block title %}Service {{ service.name }}{% endblock %}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
{% load contact_tags %}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'services/base.html' %}
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block title %}Thanks{% endblock %}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ def partner_list(request):
|
|||
cloud_provider_id = request.GET.get("cloud_provider", "")
|
||||
|
||||
# Start with all active partners
|
||||
partners = ConsultingPartner.objects.filter(disable_listing=False).order_by("name")
|
||||
partners = ConsultingPartner.objects.filter(disable_listing=False).order_by("order")
|
||||
|
||||
# Apply filters based on request parameters
|
||||
if search_query:
|
||||
|
@ -36,7 +36,7 @@ def partner_list(request):
|
|||
).distinct()
|
||||
available_cloud_providers = CloudProvider.objects.filter(
|
||||
id__in=available_cloud_provider_ids, disable_listing=False
|
||||
).order_by("name")
|
||||
).order_by("order")
|
||||
|
||||
# For the current selection, we need to make sure we include the selected items
|
||||
# even if they don't match other filters
|
||||
|
@ -64,7 +64,7 @@ def partner_list(request):
|
|||
"partners": partners.prefetch_related("services", "cloud_providers"),
|
||||
"services": Service.objects.filter(disable_listing=False).order_by("name"),
|
||||
"cloud_providers": CloudProvider.objects.filter(disable_listing=False).order_by(
|
||||
"name"
|
||||
"order"
|
||||
),
|
||||
"available_services": available_services,
|
||||
"available_cloud_providers": available_cloud_providers,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue