From c056aebadbb2276281f0e8b1d8bee8231a73f5e1 Mon Sep 17 00:00:00 2001 From: Jem Gillam <6413628+jemgillam@users.noreply.github.com> Date: Thu, 24 Jul 2025 13:05:35 +0100 Subject: [PATCH 1/8] update support page --- src/pages/support/index.mdx | 51 ++++++------------------------------- 1 file changed, 8 insertions(+), 43 deletions(-) diff --git a/src/pages/support/index.mdx b/src/pages/support/index.mdx index 95b3982c2..95e575ebe 100644 --- a/src/pages/support/index.mdx +++ b/src/pages/support/index.mdx @@ -40,7 +40,7 @@ import TeamBio from '$components/MarketingTeamBio'; @@ -79,27 +79,27 @@ import TeamBio from '$components/MarketingTeamBio'; - + - +
-Development Support gives your organisation access to the knowledge and +Development Support gives your organization access to the knowledge and experience of the Graphile team for any issues you have with PostGraphile, the Graphile suite and other tools in the ecosystem such as TypeScript, SQL, Node.js, GraphQL and more. If you're running any of the Graphile tools, you won't find anyone more qualified to help. -From $1,500/month, paid monthly through GitHub sponsors, or +From $999/month, paid monthly through GitHub sponsors, or quarterly/annually through invoicing (+ VAT where applicable). T&Cs apply.
- + - +
@@ -119,42 +119,7 @@ for faster, safer and more robust software development and practices. - - - - -
- -## Want more? - -### Our Consultancy Retainer includes the benefits above, plus: - -Longer and deeper discussions:
    -
  • planning product features
  • -
  • designing your database or GraphQL schema
  • -
  • solving (or avoiding) performance issues
  • -
  • debugging
, -'Targeted code review' -]}/> - -
-From $6,000/month, cancel any time, no minimum term. - -
- -

-Get in touch -

- -*T&Cs apply - calls may be up to 3 hours, at most one per day, subject to availability - -prices quoted for teams containing up to 10 engineers - pay monthly through GitHub Sponsors, or through -quarterly/annual invoicing (+ VAT where applicable).* -
-
- - + From ede15767837d80c1dc86874351ba5175a53d1fca Mon Sep 17 00:00:00 2001 From: Jem Gillam <6413628+jemgillam@users.noreply.github.com> Date: Thu, 24 Jul 2025 13:37:41 +0100 Subject: [PATCH 2/8] begin tweaks --- src/pages/sponsor.mdx | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/pages/sponsor.mdx b/src/pages/sponsor.mdx index a0a8d26e4..95e4c16a3 100644 --- a/src/pages/sponsor.mdx +++ b/src/pages/sponsor.mdx @@ -20,7 +20,7 @@ import Sponsors, { Sponsor } from "$components/MarketingSponsor"; -# Sponsor Graphile's Open Source Software +# Sponsor Graphile’s Open Source Software @@ -30,7 +30,7 @@ import Sponsors, { Sponsor } from "$components/MarketingSponsor";
-We're extremely grateful to the following individuals and businesses that help +We’re extremely grateful to the following individuals and businesses that help to fund ongoing development on the Graphile suite through sponsorship. **THANK YOU!** @@ -144,7 +144,7 @@ YOU!** @@ -204,7 +204,7 @@ advancement without adding additional time burdens. -### Why "crowd-funded open-source project"? +### Why “crowd-funded open-source project”? Many of our projects are open-source to give users great freedom in how they use the software, and to enable the community to have influence over how the @@ -212,9 +212,9 @@ projects progress to make it appropriate for a wide range of use-cases. To ensure users can rely on these projects for years to come, they need to be well directed and financially sustainable. -**The absolute best way to support Graphile is to become a sponsor.** -Crowd-sourced funding enables us to spend the most time directly working on -improving the software, which you and other users then benefit from. +**The best way to ensure that Graphile software is something you can depend on for years +to come is through monthly sponsorship.** Crowd-sourced funding enables us to spend the +most time directly working on improving the software, which you and other users then benefit from. - + + +### Sponsor tiers and benefits + + + + + + + + + + + + ### How is sponsorship money spent? Sponsorship money is used to fund software development, testing, documentation @@ -233,10 +247,10 @@ and releases of PostGraphile and the Graphile suite. A small amount is also used to send rewards such as stickers and learning materials to our backers. - - + + -### Is sponsorship required to use Graphile's OSS? +### Is sponsorship required to use Graphile’s OSS? Users are not legally required to give back to the Graphile project, but it is in their interest to do so. @@ -248,8 +262,8 @@ savings back, enabling the projects to advance more rapidly, and result in even greater savings for your organization. - - + + ### How can I sponsor? From db247617afd8858f60384a100531c752510d0cca Mon Sep 17 00:00:00 2001 From: Jem Gillam <6413628+jemgillam@users.noreply.github.com> Date: Thu, 24 Jul 2025 17:39:51 +0100 Subject: [PATCH 3/8] initial tiers added --- src/components/MarketingTier.js | 56 ++++++++++++++++++++ src/pages/sponsor.mdx | 93 ++++++++++++++++++++++++++++++--- 2 files changed, 142 insertions(+), 7 deletions(-) create mode 100644 src/components/MarketingTier.js diff --git a/src/components/MarketingTier.js b/src/components/MarketingTier.js new file mode 100644 index 000000000..bedfdaaf5 --- /dev/null +++ b/src/components/MarketingTier.js @@ -0,0 +1,56 @@ +import React from "react"; + +export default function MarketingTiers({ children }) { + return ( +
+ {children} +
+ ); +} + +export class Tier extends React.Component { + render() { + const { name, price, tagline, href, description } = this.props; + + return ( +
+ ); + } +} diff --git a/src/pages/sponsor.mdx b/src/pages/sponsor.mdx index 95e4c16a3..247d115a2 100644 --- a/src/pages/sponsor.mdx +++ b/src/pages/sponsor.mdx @@ -16,6 +16,7 @@ import MarketingProduct from "$components/MarketingProduct"; import postgresPostgraphileGraphql from "$images/postgres_postgraphile_graphql.png"; import Testimonial from "$components/MarketingTestimonial"; import Sponsors, { Sponsor } from "$components/MarketingSponsor"; +import Tiers, { Tier } from "$components/MarketingTier"; @@ -216,20 +217,98 @@ directed and financially sustainable. to come is through monthly sponsorship.** Crowd-sourced funding enables us to spend the most time directly working on improving the software, which you and other users then benefit from. - - - ### Sponsor tiers and benefits +As well as ensuring the sustainability and longevity of PostGraphile and the wider Graphile +suite of developer tooling, sponsorship also gives you or your company some additional benefits +such as access to security announcements and being featured in the README files of Graphile’s +main open source projects. Choose the tier which matches your funding goal, higher tiers come +with more benefits. + + + + + + +
  • Your name on the Graphile Sponsors page
  • +
  • Graphile stickers
  • +
  • Your name among those randomly featured in the PostGraphile CLI
  • +
  • Post job opportunities to our Discord community
  • +
  • Access to the #supporter-lounge on Discord
  • +
  • The warm feeling from knowing you’re supporting Open Source Software
  • + } + /> + +
  • The Supporter tier benefits and...
  • +
  • + Access to private security announcements +
  • +
  • + Free access to PostGraphile V4 Pro and Worker Pro +
  • +
  • Access to graphile-pro
  • +
  • + Your name and avatar/logo featured on our websites +
  • +
  • + Your name more frequently featured in the + PostGraphile CLI +
  • +
  • + The warm feeling that comes from knowing you’re making a difference + to the sustainability of the Graphile suite of tooling +
  • + } + /> + +
  • The Production tier benefits and...
  • +
  • + Your name and avatar/logo + featured in the READMEs of Graphile’s main OSS projects (shown on GitHub and npm) +
  • +
  • + Your name and avatar/logo prominently featured on our websites +
  • +
  • + Your name even more frequently featured in the PostGraphile CLI +
  • +
  • + Access to #vip-lounge on Discord +
  • +
  • + Free access to + pgRITA + +
  • +
  • + The warm feeling that comes from knowing{" "} + + you’re making a significant difference to the development and sustainability of + PostGraphile, Grafast, and the wider suite of Graphile developer tooling +
  • + } + /> +
    From 34d2a416c032bad59bb251fdeeb8cb9edfa44b03 Mon Sep 17 00:00:00 2001 From: Jem Gillam <6413628+jemgillam@users.noreply.github.com> Date: Fri, 25 Jul 2025 12:55:28 +0100 Subject: [PATCH 4/8] change a color --- src/components/Layout/index.scss | 13 +++++++++++++ src/components/MarketingTier.js | 8 +++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/components/Layout/index.scss b/src/components/Layout/index.scss index 30c956add..0f61e9d77 100644 --- a/src/components/Layout/index.scss +++ b/src/components/Layout/index.scss @@ -1119,3 +1119,16 @@ svg.MarketingDivide { .text-center2 { text-align: center; } + +// ---------------------------------------- +// Sponsor Page + +.tier-row { +} + +.tier { +} + +.tier a { + color: #4a68b4; +} diff --git a/src/components/MarketingTier.js b/src/components/MarketingTier.js index bedfdaaf5..5bfe6ba1a 100644 --- a/src/components/MarketingTier.js +++ b/src/components/MarketingTier.js @@ -3,6 +3,7 @@ import React from "react"; export default function MarketingTiers({ children }) { return (
    {price}{" "} /month -
    - +

    {tagline}

    From d62044d595e8ca8cc2fbdd0b211086be186fb6cc Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Wed, 24 Sep 2025 17:20:26 +0100 Subject: [PATCH 5/8] Mess with styles --- src/components/Layout/index.scss | 79 ++++++++++++++++++++++++++++++++ src/components/MarketingTier.js | 39 ++++------------ src/pages/sponsor.mdx | 1 + 3 files changed, 90 insertions(+), 29 deletions(-) diff --git a/src/components/Layout/index.scss b/src/components/Layout/index.scss index 0f61e9d77..9b4c91da0 100644 --- a/src/components/Layout/index.scss +++ b/src/components/Layout/index.scss @@ -1124,11 +1124,90 @@ svg.MarketingDivide { // Sponsor Page .tier-row { + background-color: white; + padding: 2rem 1rem; + border-radius: 12px; + border: 4px solid #1b1b3d; + color: #1b3955; +} + +.tier-item-container { + display: flex; + flex-direction: row; + gap: 1rem; + align-items: stretch; +} + +.tier-break { + width: 1px; + background-color: #777; + align-self: stretch; } +.tier { + display: flex; + flex-direction: column; + justify-items: space-between; + align-content: flex-start; + flex: 1 0 0; +} +.tier h3, .tier .price-line { + text-align: center; +} +.tier .tc .button--solid { + width: 100%; +} +.tier h3:first-child { + padding-top: 0; + margin-top: 0; +} +.tier ul:last-child { + padding-bottom: 0; + margin-bottom: 0; +} .tier { } .tier a { color: #4a68b4; } + +.tier.highlight { + h3 { + color: red; + } + a { + color: red; + &:hover { + color: red; + } + &:visited { + color: red; + } + } + .tc .button--solid { + background-color: red; + border-color: red; + } +} + +@media screen and (max-width: 64rem) { + .tier-row { + background-color: transparent; + border: none; + padding: 0; + } + .tier-item-container { + display: block; + gap: 0; + } + .tier { + background-color: white; + padding: 1rem 1rem; + border-radius: 12px; + border: 4px solid #1b1b3d; + color: #1b3955; + margin: 1rem 0; + } + +} diff --git a/src/components/MarketingTier.js b/src/components/MarketingTier.js index 5bfe6ba1a..b9d1385b9 100644 --- a/src/components/MarketingTier.js +++ b/src/components/MarketingTier.js @@ -2,46 +2,27 @@ import React from "react"; export default function MarketingTiers({ children }) { return ( -
    - {children} +
    +
    + {children.flatMap((c, i) => + i === 0 ? [c] : [
    , c] + )} +
    ); } export class Tier extends React.Component { render() { - const { name, price, tagline, href, description } = this.props; + const { name, price, tagline, href, description, highlight } = this.props; return ( -
    +

    {name}

    - +
    {price}{" "} /month - +
    Join on GitHub Sponsors{" "} diff --git a/src/pages/sponsor.mdx b/src/pages/sponsor.mdx index 247d115a2..374ee722a 100644 --- a/src/pages/sponsor.mdx +++ b/src/pages/sponsor.mdx @@ -250,6 +250,7 @@ with more benefits. /> Date: Wed, 24 Sep 2025 17:21:02 +0100 Subject: [PATCH 6/8] Update usage --- src/pages/postgraphile/usage-cli.md | 2 +- src/pages/postgraphile/usage-library.md | 41 ++++++++++++++----------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/pages/postgraphile/usage-cli.md b/src/pages/postgraphile/usage-cli.md index eee7db73f..e669d8d08 100644 --- a/src/pages/postgraphile/usage-cli.md +++ b/src/pages/postgraphile/usage-cli.md @@ -133,7 +133,7 @@ from * `--no-ignore-rbac` [RECOMMENDED] set this to exclude fields, queries and mutations that are not available to any possible user (determined from the user in connection string and any role they can become); this will be enabled by default in v5 * `--no-ignore-indexes` - set this to exclude filters, orderBy, and relations that would be expensive to access due to missing indexes + [RECOMMENDED] set this to exclude filters, orderBy, and relations that would be expensive to access due to missing indexes * `--include-extension-resources` by default, tables and functions that come from extensions are excluded; use this flag to include them (not recommended) * `--show-error-stack [json|string]` diff --git a/src/pages/postgraphile/usage-library.md b/src/pages/postgraphile/usage-library.md index 1da2c0191..7fa233544 100644 --- a/src/pages/postgraphile/usage-library.md +++ b/src/pages/postgraphile/usage-library.md @@ -117,7 +117,7 @@ Next we need an adaptor to convert a generic PostGraphile route handler into a handler that's suitable for your given server framework. We provide the following out of the box: -- `PostGraphileResponseNode` - for Node, Express, Connect, Nest, Restify, and +- `PostGraphileResponseNode` - for Node, Express, Connect, Nest, Restify, and Fastify v2 (NOT v3) - `PostGraphileResponseKoa` - for Koa - `PostGraphileResponseFastify3` - for Fastify v3 @@ -221,21 +221,25 @@ if (middleware.options.watchPg) { For Nest, this might look something like: ```js -import { Controller, Get, Post, Req, Next, Res } from '@nestjs/common'; -import { Request, Response } from 'express'; -import { PostGraphileResponseNode } from 'postgraphile'; -import { middleware } from './postgraphile.middleware'; +import { Controller, Get, Post, Req, Next, Res } from "@nestjs/common"; +import { Request, Response } from "express"; +import { PostGraphileResponseNode } from "postgraphile"; +import { middleware } from "./postgraphile.middleware"; -@Controller('/') +@Controller("/") export class PostGraphileController { @Get(middleware.graphiqlRoute) - graphiql (@Req() request: Request, @Res() response: Response, @Next() next) { - middleware.graphiqlRouteHandler(new PostGraphileResponseNode(request, response, next)); + graphiql(@Req() request: Request, @Res() response: Response, @Next() next) { + middleware.graphiqlRouteHandler( + new PostGraphileResponseNode(request, response, next) + ); } @Post(middleware.graphqlRoute) - graphql (@Req() request: Request, @Res() response: Response, @Next() next) { - middleware.graphqlRouteHandler(new PostGraphileResponseNode(request, response, next)); + graphql(@Req() request: Request, @Res() response: Response, @Next() next) { + middleware.graphqlRouteHandler( + new PostGraphileResponseNode(request, response, next) + ); } } ``` @@ -316,10 +320,10 @@ The `postgraphile` middleware factory function takes three arguments, all of which are optional. The below options are valid for postgraphile@4.12.3. -- **`pgConfig`**: Specifies the PostgreSQL database you wish to connect to. - You may pass a PostgreSQL connection string, a configuration object to pass - to the [`pg.Pool`][] constructor, or a [`pg.Pool`][] instance. Note: `pg.Pool` - has a default pool size of 10, to increase this you use the configuration +- **`pgConfig`**: Specifies the PostgreSQL database you wish to connect to. You + may pass a PostgreSQL connection string, a configuration object to pass to the + [`pg.Pool`][] constructor, or a [`pg.Pool`][] instance. Note: `pg.Pool` has a + default pool size of 10, to increase this you use the configuration object/pg.Pool instance approach and pass a different value as `max`. - **`schemaName`**: A string, or array of strings, which specifies the PostgreSQL schema(s) you to expose via PostGraphile; defaults to 'public' @@ -380,10 +384,11 @@ which are optional. The below options are valid for user in connection string and any role they can become); set this option true to skip these checks and create GraphQL fields and types for everything. The default is `true`, in v5 the default will change to `false`. - - `ignoreIndexes`: Set false to exclude filters, orderBy, and + - `ignoreIndexes`: Set false (recommended) to exclude filters, orderBy, and relations that would be expensive to access due to missing indexes. Changing - this from true to false is a breaking change, but false to true is not. The - default is `true`. + this from true to false is a breaking change, but false to true is not, so + we recommend you start with it set to `false`. The default is `true`, in v5 + the default may change to `false`. - `includeExtensionResources`: By default, tables and functions that come from extensions are excluded from the generated GraphQL schema as general applications don't need them to be exposed to the end user. You can use this @@ -757,5 +762,5 @@ You can find [express]: https://www.npmjs.com/express [graphql/express-graphql#82]: https://github.com/graphql/express-graphql/pull/82 [`pg`]: https://www.npmjs.com/pg -[`pg.Pool`]: https://node-postgres.com/api/pool +[`pg.pool`]: https://node-postgres.com/api/pool [morgan]: https://www.npmjs.com/morgan From 12538a2c515f42f6596b5c0d63b56a85d4144394 Mon Sep 17 00:00:00 2001 From: Jem Gillam <6413628+jemgillam@users.noreply.github.com> Date: Wed, 24 Sep 2025 17:32:19 +0100 Subject: [PATCH 7/8] Alter color of tier boxes --- src/components/Layout/index.scss | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/components/Layout/index.scss b/src/components/Layout/index.scss index 9b4c91da0..1bfd9b9de 100644 --- a/src/components/Layout/index.scss +++ b/src/components/Layout/index.scss @@ -1151,7 +1151,8 @@ svg.MarketingDivide { align-content: flex-start; flex: 1 0 0; } -.tier h3, .tier .price-line { +.tier h3, +.tier .price-line { text-align: center; } .tier .tc .button--solid { @@ -1166,28 +1167,38 @@ svg.MarketingDivide { margin-bottom: 0; } .tier { + h3 { + color: rgb(31, 76, 119); + } + .tc .button--solid { + background-color: rgb(31, 76, 119); + border-color: rgb(31, 76, 119); + color: white; + } } .tier a { - color: #4a68b4; + color: rgb(31, 76, 119); } .tier.highlight { h3 { - color: red; + color: #4a68b4; + color: #2d80d3; } a { - color: red; + color: #4a68b4; &:hover { - color: red; + color: #4a68b4; } &:visited { - color: red; + color: #4a68b4; } } .tc .button--solid { - background-color: red; - border-color: red; + background-color: #2d80d3; + border-color: #2d80d3; + color: white; } } @@ -1209,5 +1220,4 @@ svg.MarketingDivide { color: #1b3955; margin: 1rem 0; } - } From c0734525c3098b50eae1e58d1003839a8abbac4f Mon Sep 17 00:00:00 2001 From: Jem Gillam <6413628+jemgillam@users.noreply.github.com> Date: Wed, 24 Sep 2025 17:36:01 +0100 Subject: [PATCH 8/8] Remove unneeded copy --- src/pages/sponsor.mdx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/pages/sponsor.mdx b/src/pages/sponsor.mdx index 374ee722a..4ed3f3ded 100644 --- a/src/pages/sponsor.mdx +++ b/src/pages/sponsor.mdx @@ -221,14 +221,6 @@ most time directly working on improving the software, which you and other users -### Sponsor tiers and benefits - -As well as ensuring the sustainability and longevity of PostGraphile and the wider Graphile -suite of developer tooling, sponsorship also gives you or your company some additional benefits -such as access to security announcements and being featured in the README files of Graphile’s -main open source projects. Choose the tier which matches your funding goal, higher tiers come -with more benefits. -