Skip to content

Commit 4a865c0

Browse files
hasparusdotansimha
andauthored
Hive Blog (#6625)
Co-authored-by: Dotan Simha <[email protected]>
1 parent e6a970f commit 4a865c0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1268
-204
lines changed

.eslintrc.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ module.exports = {
231231
'nextra-scrollbar',
232232
'no-scrollbar', // from Nextra
233233
'hive-slider',
234+
'hive-prose',
234235
'subheader',
235236
],
236237
config: path.join(__dirname, './packages/web/docs/tailwind.config.ts'),

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@
133133
"@oclif/[email protected]": "patches/@[email protected]",
134134
"@fastify/vite": "patches/@fastify__vite.patch",
135135
136-
"bentocache": "patches/bentocache.patch"
136+
"bentocache": "patches/bentocache.patch",
137+
"nextra": "patches/nextra.patch",
138+
"nextra-theme-docs": "patches/nextra-theme-docs.patch"
137139
}
138140
}
139141
}

packages/web/docs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"react-countup": "6.5.3",
2525
"react-dom": "19.0.0",
2626
"react-icons": "5.4.0",
27+
"rehype-frontmatter-mdx-imports": "0.1.1",
2728
"tailwind-merge": "2.6.0"
2829
},
2930
"devDependencies": {

packages/web/docs/src/app/_meta.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,10 @@ const meta: Record<string, DeepPartial<Item | MenuItem | PageItem>> = {
8282
blog: {
8383
title: 'Blog',
8484
type: 'page',
85-
href: 'https://the-guild.dev/blog',
85+
theme: {
86+
breadcrumb: false,
87+
sidebar: false,
88+
},
8689
},
8790
github: {
8891
title: 'GitHub',
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
---
2+
title: Hive Platform Achieves SOC-2 Type II Certification
3+
tags: [security, cloud, hive, platform, compliance]
4+
authors: dotan
5+
date: 2025-03-25
6+
description:
7+
The certification process involved a thorough review of our security controls and processes, and
8+
we are proud to have achieved SOC-2 compliance.
9+
featured: true
10+
---
11+
12+
import { Callout } from '@theguild/components'
13+
14+
We're excited to announce that Hive Platform (and The Guild) has successfully achieved SOC-2 Type II
15+
certification for our flagship products.
16+
17+
This milestone represents a significant step forward in our commitment to security, privacy, and
18+
enterprise-grade reliability.
19+
20+
<Callout emoji="🚀" type="info">
21+
TL;DR: In [our Trust Center](https://security.graphql-hive.com) you can find all information about
22+
security controls, documents and certificates.
23+
</Callout>
24+
25+
## Overview
26+
27+
After a decade of serving the GraphQL open-source community, The Guild has reached another important
28+
milestone in our journey. We're proud to announce that we have successfully completed our SOC-2 Type
29+
II audit, conducted by [Advantage Partners](https://advantage-partners.com/), using the
30+
[Vanta](https://vanta.com/) compliance platform.
31+
32+
As The Guild celebrates its 10th year of operations, this certification marks an important
33+
investment in being enterprise-ready partner equipped to meet the rigorous security and compliance
34+
requirements of organizations of all sizes.
35+
36+
## What's SOC-2 Compliance? Why Type II Matters for Enterprises?
37+
38+
[SOC-2](https://www.vanta.com/collection/soc-2/what-is-soc-2) (Service Organization Control 2) is a
39+
voluntary compliance standard developed by the American Institute of CPAs (AICPA) that specifies how
40+
organizations should manage customer data based on five "trust service criteria": security,
41+
availability, processing integrity, confidentiality, and privacy.
42+
43+
While SOC-2 Type I certifications assess whether a company's systems are suitably designed at a
44+
specific point in time, **Type II certification** goes much further. It evaluates the operational
45+
effectiveness of those controls over time, providing assurance that a company not only has
46+
appropriate security measures in place but consistently follows them.
47+
48+
For enterprises, this distinction is crucial:
49+
50+
1. **Proven Reliability**: Type II demonstrates consistent adherence to security practices over
51+
time, not just a one-time assessment
52+
2. **Risk Reduction**: The certification significantly reduces the risk of data breaches and
53+
security incidents
54+
3. **Compliance Support**: It helps enterprises meet their own regulatory and internal compliance
55+
requirements
56+
4. **Vendor Management**: It simplifies vendor assessment processes, allowing for faster procurement
57+
decisions
58+
5. **Trust Verification**: It provides independent verification of security claims by a qualified
59+
third party
60+
61+
## What This Means for The Guild Customers
62+
63+
For our customers, this certification brings several tangible benefits:
64+
65+
### Enhanced Security and Privacy
66+
67+
Our SOC-2 Type II certification confirms that we have robust controls in place to protect your data.
68+
69+
This includes comprehensive security policies, regular testing, monitoring, and incident response
70+
procedures that have been independently verified.
71+
72+
### Simplified Vendor Assessment
73+
74+
For enterprise customers with stringent security requirements, our certification streamlines the
75+
procurement process. Instead of conducting extensive security assessments, you can rely on our SOC-2
76+
Type II report as evidence of our security posture.
77+
78+
### Enterprise Readiness
79+
80+
This certification demonstrates that The Guild is an organization that can confidently serve
81+
enterprise customers with complex security and compliance requirements, while maintaining technical
82+
excellence.
83+
84+
---
85+
86+
<Callout emoji="🙏" type="info">
87+
88+
We'd like to thank our team for their dedication to this process, our auditors at
89+
[Advantage Partners](https://advantage-partners.com/) for their thorough assessment, and the
90+
[Vanta](https://vanta.com/) platform for streamlining our compliance journey and making it easier
91+
for us to achieve this certification.
92+
93+
</Callout>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { cn, HiveLayoutConfig } from '@theguild/components';
2+
import { LandingPageContainer } from '../../../components/landing-page-container';
3+
import '../../hive-prose-styles.css';
4+
import { BlogPostHeader } from '../components/blog-post-layout/blog-post-header';
5+
6+
const MAIN_CONTENT = 'main-content';
7+
8+
export default function BlogPostLayout({ children }: { children: React.ReactNode }) {
9+
return (
10+
<LandingPageContainer className="hive-prose text-green-1000 mx-auto max-w-[90rem] overflow-hidden dark:text-white">
11+
<HiveLayoutConfig widths="landing-narrow" />
12+
<BlogPostHeader className="mx-auto" />
13+
<div className={cn(MAIN_CONTENT, 'mx-auto flex [&_main>p:first-of-type]:text-2xl/8')}>
14+
{children}
15+
</div>
16+
</LandingPageContainer>
17+
);
18+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
---
2+
title: Understanding the Differences Between GraphQL and REST API Gateways
3+
tags: [graphql, rest]
4+
authors: saihaj
5+
date: 2024-12-03
6+
description: What is the difference between GraphQL and REST API Gateway?
7+
featured: true
8+
---
9+
10+
API gateways serve as crucial intermediaries between clients and backend services, but GraphQL and
11+
REST gateways handle this responsibility quite differently. While a GraphQL gateway can be
12+
considered a superset of REST gateway functionality, each has its distinct characteristics and use
13+
cases.
14+
15+
## Core Differences
16+
17+
### Request Processing
18+
19+
- **REST API Gateway**: Handles traditional HTTP requests with fixed endpoints. Each endpoint
20+
typically serves a specific purpose and returns a predefined data structure. The gateway routes
21+
these requests to appropriate microservices based on URL patterns.
22+
- **GraphQL Gateway**: Processes queries written in the GraphQL query language, typically through a
23+
single endpoint. It can understand complex queries requesting specific fields and relationships,
24+
making it more flexible in handling varied data requirements.
25+
26+
### Data Aggregation
27+
28+
- **REST Gateway**: Often requires multiple endpoints to gather related data, leading to potential
29+
over-fetching or under-fetching of data. The gateway might need to make several internal calls to
30+
different services to compose a complete response.
31+
- **GraphQL Gateway**: Excels at data aggregation by allowing clients to specify exactly what data
32+
they need in a single request. The gateway can efficiently collect data from multiple services
33+
based on the query structure.
34+
35+
## Key Features and Capabilities
36+
37+
### Caching
38+
39+
- **REST Gateway**: Implements straightforward HTTP caching mechanisms. Responses can be cached
40+
based on URLs and HTTP methods.
41+
- **GraphQL Gateway**: Requires more sophisticated caching strategies due to the dynamic nature of
42+
queries. Often implements field-level caching and needs to consider query complexity.
43+
44+
### Security
45+
46+
- **REST Gateway**: Security is typically implemented at the endpoint level with traditional
47+
authentication and authorization mechanisms.
48+
- **GraphQL Gateway**: Provides more granular security controls, allowing permissions to be set at
49+
the field level. Can implement query complexity analysis to prevent abuse.
50+
51+
### Schema Management
52+
53+
- **REST Gateway**: No built-in schema management. API documentation typically relies on external
54+
tools like Swagger/OpenAPI.
55+
- **GraphQL Gateway**: Schema management can be as straightforward as maintaining schema definitions
56+
in code and versioning them with Git. Teams can choose between simple code-first approaches or
57+
leverage specialized tools like GraphQL Hive for more advanced schema registry and validation
58+
features. This flexibility allows teams to scale their schema management practices as their needs
59+
grow.
60+
61+
### Service Integration
62+
63+
- **REST Gateway**: No built-in way to integrate with other protocols.
64+
- **GraphQL Gateway**: A GraphQL gateway like
65+
[Hive Gateway](https://the-guild.dev/graphql/hive/docs/gateway?utm_source=the_guild&utm_medium=blog&utm_campaign=understanding-the-differences-between-graphql-and-rest-api-gateways)
66+
unifies multiple protocols
67+
([REST](https://the-guild.dev/graphql/mesh/v1/source-handlers/openapi?utm_source=the_guild&utm_medium=blog&utm_campaign=understanding-the-differences-between-graphql-and-rest-api-gateways),
68+
[gRPC](https://the-guild.dev/graphql/mesh/v1/source-handlers/grpc?utm_source=the_guild&utm_medium=blog&utm_campaign=understanding-the-differences-between-graphql-and-rest-api-gateways),
69+
[SOAP](https://the-guild.dev/graphql/mesh/v1/source-handlers/soap?utm_source=the_guild&utm_medium=blog&utm_campaign=understanding-the-differences-between-graphql-and-rest-api-gateways)
70+
&
71+
[many more](https://the-guild.dev/graphql/mesh/v1/source-handlers?utm_source=the_guild&utm_medium=blog&utm_campaign=understanding-the-differences-between-graphql-and-rest-api-gateways))
72+
into a consistent interface using tools like
73+
[GraphQL Mesh](https://the-guild.dev/graphql/mesh?utm_source=the_guild&utm_medium=blog&utm_campaign=understanding-the-differences-between-graphql-and-rest-api-gateways),
74+
while supporting federation capabilities that let teams independently develop and deploy subgraphs
75+
as part of a unified supergraph. Learn more about Federation
76+
[here](https://the-guild.dev/graphql/hive/federation?utm_source=the_guild&utm_medium=blog&utm_campaign=understanding-the-differences-between-graphql-and-rest-api-gateways).
77+
78+
## Why Choose GraphQL Gateway?
79+
80+
GraphQL gateways represent the future of API architecture for several compelling reasons:
81+
82+
1. **Enhanced Developer Experience**: GraphQL's intuitive query language and self-documenting nature
83+
significantly improve developer productivity.
84+
2. **Integration**: Easily integrate legacy services and offer a unified query experience.
85+
3. **Optimal Performance**: By allowing clients to request exactly what they need, GraphQL
86+
eliminates the over-fetching and under-fetching problems common with REST APIs.
87+
4. **Future-Proof Architecture**: GraphQL's flexible schema system makes it easier to evolve your
88+
API over time without breaking existing clients.
89+
5. **Better Resource Utilization**: The ability to combine multiple data requirements into a single
90+
request reduces server load and network overhead.
91+
6. **Strong Ecosystem**: The GraphQL ecosystem offers excellent tools for monitoring, testing, and
92+
managing your API gateway.
93+
94+
## Conclusion
95+
96+
While REST API gateways have served us well, GraphQL gateways offer superior capabilities for modern
97+
applications. Their ability to handle complex data requirements efficiently, combined with excellent
98+
developer experience and powerful tools, makes them the recommended choice for new API gateway
99+
implementations. Organizations can start simple with basic schema management in Git and gradually
100+
adopt more sophisticated tools like Hive as their needs evolve.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export default {
2+
'*': {
3+
display: 'hidden',
4+
},
5+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import type { StaticImageData } from 'next/image';
2+
import { AuthorId } from '../../authors';
3+
import { MdxFile, PageMapItem } from '../../mdx-types';
4+
5+
export interface BlogFrontmatter {
6+
authors: AuthorId | AuthorId[];
7+
title: string;
8+
date: string;
9+
tags: string | string[];
10+
featured?: boolean;
11+
image?: VideoPath | StaticImageData;
12+
thumbnail?: StaticImageData;
13+
}
14+
15+
type VideoPath = `${string}.${'webm' | 'mp4'}`;
16+
17+
export type BlogPostFile = Required<MdxFile<BlogFrontmatter>>;
18+
19+
export function isBlogPost(item: PageMapItem): item is BlogPostFile {
20+
return item && 'route' in item && 'name' in item && 'frontMatter' in item && !!item.frontMatter;
21+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import Image from 'next/image';
2+
import { Anchor, cn } from '@theguild/components';
3+
import { Author, AuthorId, authors } from '../../../authors';
4+
import { BlogPostFile } from '../blog-types';
5+
import { BlogTagChip } from './blog-tag-chip';
6+
7+
export interface BlogCardProps {
8+
post: Pick<BlogPostFile, 'frontMatter' | 'route'>;
9+
className?: string;
10+
variant?: 'default' | 'featured';
11+
/**
12+
* The tag to display on the card. If not provided, the first tag will be used.
13+
* Used for tag index page, where we want to show all cards with the same tag.
14+
*/
15+
tag?: string | null;
16+
}
17+
18+
export function BlogCard({ post, className, variant, tag }: BlogCardProps) {
19+
const frontmatter = post.frontMatter;
20+
const { title, tags } = frontmatter;
21+
const date = new Date(frontmatter.date);
22+
23+
const postAuthors: Author[] = (
24+
typeof frontmatter.authors === 'string'
25+
? [authors[frontmatter.authors as AuthorId]]
26+
: frontmatter.authors.map(author => authors[author as AuthorId])
27+
).filter(Boolean);
28+
29+
if (postAuthors.length === 0) {
30+
console.error('author not found', frontmatter);
31+
throw new Error(`authors ${JSON.stringify(frontmatter.authors)} not found`);
32+
}
33+
34+
const firstAuthor = postAuthors[0];
35+
36+
// todo: show more authors on hover?
37+
const avatarSrc =
38+
firstAuthor.avatar || `https://avatars.githubusercontent.com/${firstAuthor.github}?v=4&s=48`;
39+
40+
return (
41+
<Anchor
42+
className={cn(
43+
'group/card hive-focus hover:ring-beige-400 block rounded-2xl dark:ring-neutral-600 hover:[&:not(:focus)]:ring dark:hover:[&:not(:focus)]:ring-neutral-600',
44+
className,
45+
)}
46+
href={post.route}
47+
>
48+
<article
49+
className={cn(
50+
'text-green-1000 flex h-full flex-col gap-6 rounded-2xl p-6 lg:gap-10 dark:text-white',
51+
variant === 'featured'
52+
? 'bg-beige-200 group-hover/card:bg-beige-300/70 dark:bg-neutral-700/70 dark:hover:bg-neutral-700'
53+
: 'group-hover/card:bg-beige-200/70 bg-beige-100 dark:bg-neutral-800/70 dark:hover:bg-neutral-800',
54+
)}
55+
>
56+
<header className="flex items-center justify-between gap-1 text-sm/5 font-medium">
57+
<BlogTagChip tag={tag ?? tags[0]} colorScheme={variant || 'default'} inert />
58+
<time
59+
dateTime={date.toISOString()}
60+
className="text-beige-800 whitespace-pre text-sm/5 font-medium"
61+
>
62+
{date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })}
63+
</time>
64+
</header>
65+
<h3
66+
className={cn(
67+
'text-xl/7 lg:min-h-[172px]',
68+
variant === 'featured' ? 'text-2xl/8' : 'xl:min-h-[120px]',
69+
)}
70+
>
71+
{title}
72+
</h3>
73+
<footer className="mt-auto flex items-center gap-3">
74+
<div className="relative size-6">
75+
<Image
76+
src={avatarSrc}
77+
alt={firstAuthor.name}
78+
width={24}
79+
height={24}
80+
className="rounded-full"
81+
/>
82+
<div className="bg-beige-200/70 absolute inset-0 size-full rounded-full opacity-30 mix-blend-hue" />
83+
</div>
84+
<span className="text-sm/5 font-medium">{firstAuthor.name}</span>
85+
</footer>
86+
</article>
87+
</Anchor>
88+
);
89+
}

0 commit comments

Comments
 (0)