select
'form' as component,
'User' as title,
'Create' as validate;
---
select
"name", "type",
"description"
from my_form_fields;
./user_creation.sql
https://example.com/user_creation.sql
@ophir_dev
@lovasoa
uses it in production ?
isn't this a stupid idea ?
does it do exactly ?
to build a website in a day ?
let's build twitter together
of the coolest features
Your scientists were so preoccupied with whether they could, they didn’t stop to think if they should
We have a problem
1 programmer
empty seats
McKinsey, 2023: for 10 Java job postings, there is <1 skilled profile online
10
We have a problem
non-programmers will write apps
some apps will never materialize
programmers will write more apps
We have a problem
non-programmers will write apps
programmers will write more apps
Let's make their lives easier...
Simplicity
🌱
Efficiency
🕒
Expressiveness
🧠
Reusability
🔄
Drupal
WordPress
Shopify
Squarespace
Django
Rails
Laravel
Spring Boot
Budibase
AppSmith
React
SvelteKit
CMS & Website Builders
Backend Frameworks
Low-Code app builders
Front-end frameworks
Web Site
Web App
Beginner Friendly
Customizable
Web Site
Web App
Beginner Friendly
Customizable
Everything loads instantly
User-Generated
content
Accessible to non-programmers
Connects to any database
Easy
Beautiful
Fast
Build your site in a weekend
I write the CSS, not you
Rust, Lighthouse 100, scales to ∞
... written in Rust
reusable HTML
Database connections
Web Page
SQL file
1
1
3 components
tab
component
tab
component
component | center |
---|---|
tab | true |
title | link | active | color |
---|---|---|---|
Show all cards | ? | false | NULL |
Show blue cards | ?tab=blue | false | NULL |
Show green cards | ?tab=green | true | green |
Show red cards | ?tab=red | false | NULL |
Opening component, top-level properties
Filling the component, row-level properties
card
component
card
component
component |
---|
card |
title | link | description | color | top_image |
---|---|---|---|---|
Leaf | https://.../ | Autumn's dance begins, [...] | green | leaf.jpg |
Caterpillar | https://.../ | Caterpillar crawls [...] | green | caterpillar.jpg |
Butterfly | https://.../ | Cocoon unfolds wings [...] | green | butterfly.jpg |
Opening component
Filling the component, row-level properties
text
component
text
component
component | contents_md |
---|---|
text | See [source code on GitHub](https://github.com/.../tabs.sql) |
Opening component
CREATE TABLE
tweets (
"id" bigserial,
"tweet" text
);
select 'shell' as component;
select 'shell' as component,
'TinyTweeter' as title;
select 'shell' as component,
'TinyTweeter' as title;
select 'form' as component;
select 'shell' as component,
'TinyTweeter' as title;
select 'form' as component,
'Tweet' as validate;
select 'shell' as component,
'TinyTweeter' as title;
select 'form' as component,
'Tweet' as validate;
select
'Tell me your story...'
as placeholder;
select 'shell' as component,
'TinyTweeter' as title;
select 'form' as component,
'Tweet' as validate;
select 'textarea' as type,
'Tell me your story...'
as placeholder;
select 'shell' as component,
'TinyTweeter' as title;
select 'form' as component,
'Tweet' as validate;
select 'textarea' as type,
'Tell me your story...' as placeholder;
select 'checkbox' as type,
'Terms and conditions'
as label;
select 'shell' as component,
'TinyTweeter' as title;
select 'form' as component,
'Tweet' as validate;
select 'new_tweet' as name,
'Your story' as label,
'textarea' as type,
'Tell me your story...' as placeholder;
select 'checkbox' as type,
'Terms and conditions' as label,
true as required;
select 'shell' as component,
'TinyTweeter' as title;
select 'form' as component,
'Tweet' as validate;
select 'new_tweet' as name,
'Your story' as label,
'textarea' as type,
'Tell me your story...' as placeholder;
select 'checkbox' as type,
'Terms and conditions' as label,
true as required;
insert into tweets (tweet)
select :new_tweet;
select 'shell' as component,
'TinyTweeter' as title;
select 'form' as component,
'Tweet' as validate;
select 'new_tweet' as name,
'Your story' as label,
'textarea' as type,
'Tell me your story...' as placeholder;
select 'checkbox' as type,
'Terms and conditions' as label,
true as required;
insert into tweets (tweet)
select :new_tweet
where :new_tweet is not null;
select 'shell' as component,
'TinyTweeter' as title;
select 'form' as component,
'Tweet' as validate;
select 'new_tweet' as name,
'Your story' as label,
'textarea' as type,
'Tell me your story...' as placeholder;
select 'checkbox' as type,
'Terms and conditions' as label,
true as required;
insert into tweets (tweet)
select :new_tweet
where :new_tweet is not null;
select 'card' as component;
select tweet as description
from tweets;
Examples of SQLPage in use
What are people doing with SQLPage ?
Helping
disabled
pupils
Mapping
archeological
artefacts
Digitalization
in
South Africa
What are people doing with SQLPage ?
Helping
disabled
pupils
Helping disabled pupils with SQLPage
David
Coordinator,
Inclusive Localized Support Hub
Coordinating human support resources based on the needs of students with disabilities
No past experience with SQL
Looking for a tool to replace an excel spreadsheet
David
David
David
What are people doing with SQLPage ?
Mapping archaeological artefacts
Mapping archaeological artefacts
Florent
Responsible for Protohistoric Operations,
National Institute of Preventive Archaeological Research (INRAP)
Public institution in France that is responsible for conducting archaeological research and excavations
Geographic Information System Coordinator
RAMEN collective
Recherches Archéologiques en Modélisation de l'Enregistrement Numérique
BADASS database
Base archéologique de données attributaires et spatiales
Florent
Florent
Florent
What are people doing with SQLPage ?
Digitalization
in
Africa
From call center to building the company's next app
William
IT support
Building a tool to manage clients and processes
Started at the company's call center
Promoted to IT support
Now works on SQLPage most of the day
Programming experience in Delphi
From call center to building the company's next app
William
I don’t think I’ll use anything else for frontend.
I’d like to use it for personal projects as well: I can make extra income, it’s very efficient !
It’s kind of a big thing. We launch in January.
Cool features
Build an API in 45 seconds
SELECT
'json' AS component,
JSON_OBJECT(
'users', (
SELECT JSON_GROUP_ARRAY(
JSON_OBJECT(
'username', username,
'userid', id
)
) FROM users
)
) AS contents;
api.sql
{
"users" : [
{
"username": "Mary",
"userid": 128448
},
{
"username": "Bob",
"userid": 479326
}
]
}
http://localhost/api.sql
docker run -p 80:8080 -v .:/var/www lovasoa/sqlpage
Create user account in 1 minute
INSERT INTO
user_info (
username,
password_hash
)
VALUES (
:username,
sqlpage.hash_password(:password)
);
signup.sql
postgres://localhost/sqlpage
username | password_hash |
---|---|
John | $argon2id$v=19$m=16,t=2,p=1$TERTd0lIcUpraWFTcmRQYw$+bjtag7Xjb6p1dsuYOkngw |
SELECT
'authentication' AS component,
'signin.sql?error' AS link,
( SELECT password_hash
FROM user_info
WHERE username = :username
) AS password_hash,
:password AS password;
login.sql
Leave a star on github !
lovasoa/SQLPage
sql.ophir.dev
Visit the website