diff --git a/hub/services/admin.py b/hub/services/admin.py index 086aafb..57bc2a7 100644 --- a/hub/services/admin.py +++ b/hub/services/admin.py @@ -1,5 +1,7 @@ from django.contrib import admin from django.utils.html import format_html +from adminsortable2.admin import SortableAdminMixin + from .models import ( Category, CloudProvider, @@ -15,6 +17,40 @@ from .models import ( ) +class PlanInline(admin.StackedInline): + model = Plan + extra = 1 + fieldsets = ( + (None, {"fields": ("name", "description", "pricing", "plan_description")}), + ) + + +class ExternalLinkOfferingInline(admin.TabularInline): + model = ExternalLinkOffering + extra = 1 + fields = ("description", "url", "order") + ordering = ("order", "description") + + +class OfferingInline(admin.StackedInline): + model = ServiceOffering + extra = 1 + fieldsets = ( + ( + None, + { + "fields": ( + "description", + "service", + "cloud_provider", + "offer_description", + ) + }, + ), + ) + show_change_link = True + + @admin.register(ReusableText) class ReusableTextAdmin(admin.ModelAdmin): list_display = ("name",) @@ -36,6 +72,7 @@ class CloudProviderAdmin(admin.ModelAdmin): list_display = ("name", "slug", "logo_preview") search_fields = ("name", "description") prepopulated_fields = {"slug": ("name",)} + inlines = [OfferingInline] def logo_preview(self, obj): if obj.logo: @@ -61,7 +98,7 @@ class ServiceAdmin(admin.ModelAdmin): search_fields = ("name", "description", "slug") prepopulated_fields = {"slug": ("name",)} filter_horizontal = ("categories",) - inlines = [ExternalLinkInline] + inlines = [ExternalLinkInline, OfferingInline] def logo_preview(self, obj): if obj.logo: @@ -83,21 +120,6 @@ class ServiceAdmin(admin.ModelAdmin): partner_list.short_description = "Consulting Partners" -class PlanInline(admin.StackedInline): - model = Plan - extra = 1 - fieldsets = ( - (None, {"fields": ("name", "description", "pricing", "plan_description")}), - ) - - -class ExternalLinkOfferingInline(admin.TabularInline): - model = ExternalLinkOffering - extra = 1 - fields = ("description", "url", "order") - ordering = ("order", "description") - - @admin.register(ServiceOffering) class ServiceOfferingAdmin(admin.ModelAdmin): list_display = ("service", "cloud_provider") @@ -130,7 +152,7 @@ class LeadAdmin(admin.ModelAdmin): @admin.register(WebsiteFaq) -class WebsiteFaqAdmin(admin.ModelAdmin): +class WebsiteFaqAdmin(SortableAdminMixin, admin.ModelAdmin): list_display = ("question", "order") search_fields = ("question", "answer") ordering = ("order",) diff --git a/hub/services/static/img/about-image.png b/hub/services/static/img/about-image.png new file mode 100644 index 0000000..1b2fbbf Binary files /dev/null and b/hub/services/static/img/about-image.png differ diff --git a/hub/services/static/img/servala-social-share.png b/hub/services/static/img/servala-social-share.png index c998cff..875faa4 100644 Binary files a/hub/services/static/img/servala-social-share.png and b/hub/services/static/img/servala-social-share.png differ diff --git a/hub/services/static/img/sir-vala-text.png b/hub/services/static/img/sir-vala-text.png new file mode 100644 index 0000000..8d2b1e2 Binary files /dev/null and b/hub/services/static/img/sir-vala-text.png differ diff --git a/hub/services/static/img/vshn-logo-wide.png b/hub/services/static/img/vshn-logo-wide.png new file mode 100644 index 0000000..9ff02f8 Binary files /dev/null and b/hub/services/static/img/vshn-logo-wide.png differ diff --git a/hub/services/static/servala-flyer.pdf b/hub/services/static/servala-flyer.pdf new file mode 100644 index 0000000..7c7ac5e Binary files /dev/null and b/hub/services/static/servala-flyer.pdf differ diff --git a/hub/services/templates/pages/about.html b/hub/services/templates/pages/about.html new file mode 100644 index 0000000..4034d10 --- /dev/null +++ b/hub/services/templates/pages/about.html @@ -0,0 +1,214 @@ +{% extends 'services/base.html' %} +{% load static %} +{% load contact_tags %} + +{% block title %}About Open Cloud Native Services Hub{% endblock %} + +{% block content %} +
+
+
+

About Servala

+
+

Open Cloud Native Service Hub. Unlock the Power of Cloud Native Applications.

+
+
+
+
+ +
+
+
+
+
+
+
+

Overview

+
+
+

Servala connects businesses, developers, and cloud service providers on one unique hub with secure, scalable, and easy-to-use cloud-native services.

+

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.

+

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).

+
+
+ +
+
+
+ About Servala +
+
+
+ +
+

Who benefits from using Servala?

+
+

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.

+
+
+

Independent Software Vendors (ISVs)

+
    +
  • Transform applications into SaaS offerings.
  • +
  • Leverage the Servala Hub to distribute, monetize, and efficiently operate your software.
  • +
  • Extend your reach to new markets and ecosystems.
  • +
+
+
+

Cloud Service Providers (CSPs)

+
    +
  • Offer value-added services and applications to end users.
  • +
  • Respond effectively to fast-paced market changes.
  • +
  • Gain tools to enhance operational efficiency and market relevance.
  • +
+
+
+

Enterprises and Their Users

+
    +
  • Access scalable, secure, and cost-efficient services.
  • +
  • Enable self-service installation of trusted applications without managing infrastructure.
  • +
  • Benefit from built-in compliance, developer productivity boosts, and operational simplicity.
  • +
+
+
+ +
+

Why Choose Servala?

+
+
+
+
+
+ +

Agility & Faster Time-to-Market

+
+

Access a vast catalog of services and applications for rapid deployment and + innovation.

+
+
+
+
+
+
+
+ +

Cloud-Agnostic & Vendor-Independent

+
+

Deploy services on any cloud or on-premises, ensuring maximum + flexibility.

+
+
+
+
+
+
+
+ +

Secure & Compliant

+
+

Built to meet rigorous industry standards (GDPR, ISO, ISAE) to ensure data + protection and regulatory compliance.

+
+
+
+
+
+
+
+ +

Cost Optimization

+
+

Transparent pricing to manage and reduce cloud expenses efficiently.

+
+
+
+
+
+
+
+ +

Seamless Integration

+
+

Pre-configured solutions and Kubernetes-native tools integrate smoothly into + existing workflows.

+
+
+
+
+
+
+
+ +

Scalable & DevOps-Ready

+
+

Cloud-native services that scale automatically, keeping up with your business + growth.

+
+
+
+
+
+
+
+ +

Fully Managed & Hassle-Free Operations

+
+

VSHN takes care of maintenance, monitoring, and updates - so you can focus on + innovation.

+
+
+
+
+
+
+
+ +

Open Source & Beyond

+
+

Access both Open Source and commercial editions to suit your needs.

+
+
+
+
+
+
+
+ +

Expert Network & Consulting

+
+

Tap into a network of consulting partners who understand and optimize available + services.

+
+
+
+
+
+ +
+
+
+

Our Mascot

+
+

Say Hi! to Sir Vala 👋

+

Did you know? The serval (Leptailurus serval) is a wild cat native to Africa, found in grasslands, wetlands, and forests across sub-Saharan regions. It is protected in many areas, with hunting regulated or prohibited.

+
+
+
+
+
+ Servala Mascot Sir Vala +
+
+
+ +
+

Contact Us

+ {% embedded_contact_form source="About Us" %} +
+ +
+
+
+{% endblock %} \ No newline at end of file diff --git a/hub/services/templates/services/homepage.html b/hub/services/templates/pages/homepage.html similarity index 100% rename from hub/services/templates/services/homepage.html rename to hub/services/templates/pages/homepage.html diff --git a/hub/services/templates/services/base.html b/hub/services/templates/services/base.html index 662a9f0..1dd43e5 100644 --- a/hub/services/templates/services/base.html +++ b/hub/services/templates/services/base.html @@ -41,6 +41,7 @@ +