Skip to content

Commit 303c41f

Browse files
Merge pull request #236 from movesthatmatter/game-dev-focus
docs(readme, docs): 📝 start focusing on the js game dev niche
2 parents 82c425f + e5b003d commit 303c41f

File tree

7 files changed

+98
-50
lines changed

7 files changed

+98
-50
lines changed

README.md

+54-25
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
</div>
77

88
<div align="center">
9-
<h1>Serverless real-time data sharing infrastructure for frontend developers</h1>
10-
Build multiplayer games, chat apps or anything in between without worrying about the server side, backend logic or even the network! Works with React out of the box!
9+
<h1>Serverless Multiplayer Infrastructure for JavaScript Game Developers</h1>
10+
Build multiplayer games without worrying about server-side logic, backend infrastructure, or networking. Movex takes care of it all—works with React out of the box!
1111
</div>
1212

1313
<br/>
@@ -29,32 +29,37 @@
2929

3030
## 🧐 Why Movex
3131

32-
__Movex let's you cut the development effort in half and ship faster by abstracting the backend logic and server-side away! 🎉__
33-
34-
With it's unique approach and set of features Movex gives you the freedom to focus only on the front-end while still maintaining all of the control over the App Logic, UI/UX and Authority over Data.
35-
36-
In addition it comes pre-packed with:
37-
- the ability to keep parts of the shared state private to specific users. [See Secret State](https://www.movex.dev/docs/features/secret_state)
38-
- ensures the minimun amount of data is sent over the wire with each update. [See Deterministic Action Propagation](https://www.movex.dev/docs/features/functional)
39-
- keeps bad actors away by keeping the Data Reconciliation Logic out of the client reach. [See Authoritative Server](https://www.movex.dev/docs/features/server_authoritative)
40-
41-
42-
## 🚀 Examples
32+
__Movex cuts your development effort in half and helps you ship faster by abstracting away backend logic and server-side complexity! 🎉__
33+
34+
With its unique approach and robust set of features, Movex gives you the freedom to focus solely on the front-end while still maintaining full control over the Game Logic, UI/UX, and Data Authority.
35+
36+
## ⭐️ Features:
37+
- __Serverless:__
38+
Movex manages the network logic, state-sharing protocols, server deployment and maintenance, along with various other essential functionalities. [Learn more](https://www.movex.dev/docs/features/serverless).
39+
- __Authoritative Server:__
40+
By keeping the data reconciliation logic on the server side, Movex keeps bad actors away, ensuring the integrity of your application. [Learn more](https://www.movex.dev/docs/features/server_authoritative).
41+
- __Real-time synchronization:__
42+
By utilizing the Observable Pattern to monitor state changes in registered resources Movex promptly notifes the UI layer. [See more](https://www.movex.dev/docs/features/realtime)
43+
- __Private State:__
44+
Movex allows parts of the shared state to remain private to specific users, ensuring that sensitive information is kept secure. [See more](https://www.movex.dev/docs/features/private_state)
45+
- __Efficient Data Flow:__
46+
Movex ensures that only the minimum required data is transmitted with each update, optimizing performance. (See: [Deterministic Action Propagation](https://www.movex.dev/docs/features/functional#determinstic-action-propagation))
47+
48+
49+
## 💜 Who uses Movex?
50+
<a href="https://chessroulette.live" target="_blank" alt="Chessroulette | Conect. Play. Stream">
51+
<picture width="500">
52+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/movesthatmatter/chessroulette-web/master/src/components/Logo/assets/Logo_light_full.svg" width="250">
53+
<img alt="Chessroulette | Conect. Play. Stream" src="https://raw.githubusercontent.com/movesthatmatter/chessroulette-web/master/src/components/Logo/assets/Logo_dark_full.svg" width="250">
54+
</picture>
55+
</a>
4356

44-
- **Chat App** - https://github.com/GabrielCTroia/movex-next-chat
57+
## 🚀 Examples & Demos
4558
- **Multiplayer Rock Paper Scissors Game** - https://codesandbox.io/s/rps-demo-x877yl
46-
47-
## ⭐️ Features
48-
- 🤯 __No Backend logic to manage__ - Movex takes care of it for you! [See how](https://www.movex.dev/docs/features/frontend_only).
49-
- 👑 __Authoritative Server__
50-
- 🤩 __Real-time synchronization__
51-
- 🤐 __Secret State__
52-
- 😎 __Follows the Flux API__
53-
- 😍 __Works with Vanilla JS or any Framework__
59+
- **Chat App** - https://github.com/GabrielCTroia/movex-next-chat
5460

5561
## 🧙🏽‍♂️ How Movex works
56-
57-
At the client level, Movex adheres to the [Flux Pattern](https://medium.com/weekly-webtips/flux-pattern-architecture-in-react-35d0b55313f6) to react to UI changes. Additionally, it employs the ["Deterministic Action Propagation Method"](https://www.movex.dev/docs/features/functional#determinstic-action-propagation) to synchronize any state changes with the Global (Master) State which lives on the server. Consequently, this process instantly updates all other peers on the network, ensuring real-time data synchronization. [Learn More](https://www.movex.dev/docs/how).
62+
Movex follows the [Flux Pattern](https://medium.com/weekly-webtips/flux-pattern-architecture-in-react-35d0b55313f6) locally to respond to UI changes. It then employs the [Deterministic Propagation Method](https://www.movex.dev/docs/features/functional#determinstic-action-propagation) to synchronize state changes with the Global State(aka Master State) and all peers in the network. [Learn More](https://www.movex.dev/docs/how).
5863

5964
<div align="center">
6065
<picture width="600">
@@ -65,7 +70,31 @@ At the client level, Movex adheres to the [Flux Pattern](https://medium.com/week
6570

6671
## 👩‍💻 Getting Started
6772

68-
Visit the [Docs](https://www.movex.dev/docs/overview/get_started) to get started with Movex.
73+
#### 1. Install It
74+
75+
```bash
76+
yarn add movex; yarn add --dev movex-service
77+
```
78+
79+
#### 2. Create the Movex Config File
80+
81+
```ts
82+
export default {
83+
resources: {},
84+
};
85+
```
86+
87+
#### 3. Start Movex in Dev Mode
88+
89+
```bash
90+
npx movex dev
91+
```
92+
93+
#### 4. Next Steps
94+
To continue with the next steps see [Get Started Docs](https://www.movex.dev/docs/overview/get_started).
95+
96+
## Documentation
97+
Visit the [Docs](https://www.movex.dev/docs/overview/introduction) to get started with Movex.
6998

7099
## 🙏 Contributing
71100

apps/movex-docs/modules/home/HeroSubText.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ type Props = {
77
export const HeroSubText: React.FC<Props> = (props) => {
88
return (
99
<h3 className={props.className}>
10-
Accelerate your development process and deliver faster by abstracting
11-
the backend complexities with Movex! 🚀
10+
{/* Accelerate your development process and deliver faster by abstracting
11+
the backend complexities with Movex! 🚀 */}
12+
Accelerate your game development and deliver faster by abstracting the backend complexities with Movex—made for JavaScript Game Developers.
1213
</h3>
1314
);
1415
};

apps/movex-docs/modules/home/HeroText.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,18 @@ type Props = {
77
export const HeroText: React.FC<Props> = (props) => {
88
return (
99
<h1 className={props.className}>
10-
Effortless realtime{' '}<br/>
10+
Serverless{' '}
11+
<div className='hidden lg:block'/>
12+
<span className="text-transparent bg-clip-text bg-gradient-to-r from-movexBlue-400 via-indigo-500 to-purple-500 0from-movexBlue-300 sto-green-500 text-movexBlue-500">
13+
Multiplayer Infrastructure
14+
</span>{' '}
15+
<div className='hidden lg:block'/>
16+
for JavaScript Games
17+
{/* Effortless realtime{' '}<br/>
1118
<span className="text-transparent bg-clip-text bg-gradient-to-r from-movexBlue-400 via-indigo-500 to-purple-500 0from-movexBlue-300 sto-green-500 text-movexBlue-500">
1219
data sharing
1320
</span>{' '}
14-
infrastructure
21+
infrastructure */}
1522
{/* Build{' '}
1623
<span className="text-transparent bg-clip-text bg-gradient-to-r from-movexBlue-400 via-indigo-500 to-purple-500 0from-movexBlue-300 sto-green-500 text-movexBlue-500">
1724
Multiplayer Apps

apps/movex-docs/modules/home/homeVars.ts

+20-9
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const features = [
1212
{
1313
name: 'Serverless',
1414
description:
15-
'Movex manages the network logic, state-sharing protocols, server deployment and maintenance, along with various other essential functionalities.',
15+
'Movex manages the network logic, state-sharing protocols, server deployment and maintenance, along with various other essential functionalities.',
1616
icon: BoltIcon,
1717
link: {
1818
label: 'Learn More',
@@ -45,24 +45,35 @@ export const features = [
4545
{
4646
name: 'Authoritative Server',
4747
description:
48-
"To safeguard app logic from potential bad actors, it is processed on the server while remaining abstracted from the developer.",
48+
'To safeguard app logic from potential bad actors, it is processed on the server while remaining abstracted from the developer.',
4949
icon: FlagIcon,
5050
link: {
5151
label: 'Learn More',
5252
url: '/docs/features/server_authoritative',
5353
},
5454
color: 'orange-500',
5555
},
56+
// {
57+
// name: 'Typesafe Functional Programming',
58+
// description:
59+
// "Movex is entirely built in TypeScript. If you’re familiar with Redux or the React.useReducer() hook, you’ll feel right at home. If not, getting started with Movex is quick and easy!",
60+
// icon: ShieldCheckIcon,
61+
// link: {
62+
// label: 'Learn More',
63+
// url: '/docs/features/functional',
64+
// },
65+
// color: 'red-500',
66+
// },
5667
{
57-
name: 'Typesafe Functional Programming',
68+
name: 'Efficient Data Flow',
5869
description:
59-
"Movex is entirely built in TypeScript. If you’re familiar with Redux or the React.useReducer() hook, you’ll feel right at home. If not, getting started with Movex is quick and easy!",
70+
'Movex ensures that only the minimum required data is transmitted with each update, optimizing performance.',
6071
icon: ShieldCheckIcon,
6172
link: {
6273
label: 'Learn More',
63-
url: '/docs/features/functional',
74+
url: 'https://www.movex.dev/docs/features/functional#determinstic-action-propagation',
6475
},
65-
color: 'red-500',
76+
color: 'orange-500',
6677
},
6778
{
6879
name: 'Open Source',
@@ -80,15 +91,15 @@ export const features = [
8091
export const faqs = [
8192
{
8293
q: 'What does "No Server Code" or "No Server Hassle" really mean?',
83-
a: "This means you, the developer, don’t need to write, build, distribute, or maintain any server code. Your focus is solely on client-side/local code, as if you were developing for a single player or user, while Movex seamlessly manages the server component for you.",
94+
a: 'This means you, the developer, don’t need to write, build, distribute, or maintain any server code. Your focus is solely on client-side/local code, as if you were developing for a single player or user, while Movex seamlessly manages the server component for you.',
8495
link: {
8596
label: 'See more here',
8697
url: '/docs/features/server_authoritative',
8798
},
8899
},
89100
{
90101
q: 'How can there be "Server Authoritative" without a server?',
91-
a: "Spot on, detective! There is indeed a server running, but it’s fully abstracted by Movex and movex-service, so you can focus on development without any hassle.",
102+
a: 'Spot on, detective! There is indeed a server running, but it’s fully abstracted by Movex and movex-service, so you can focus on development without any hassle.',
92103
link: {
93104
label: 'See more here',
94105
url: '/docs/features/server_authoritative',
@@ -100,7 +111,7 @@ export const faqs = [
100111
// },
101112
{
102113
q: 'What can I build with Movex?',
103-
a: "Movex employs Deterministic Action Propagation to seamlessly transmit Actions (small bits of data) between clients and servers. This approach is particularly effective for games or applications with infrequent state changes, such as turn-based games (e.g., Age of Empires). However, it may not suffice for fast-paced shooter games or applications requiring extensive user input transmitted over the network. Future enhancements are in the works to address these needs as well!",
114+
a: 'Movex employs Deterministic Action Propagation to seamlessly transmit Actions (small bits of data) between clients and servers. This approach is particularly effective for games or applications with infrequent state changes, such as turn-based games (e.g., Age of Empires). However, it may not suffice for fast-paced shooter games or applications requiring extensive user input transmitted over the network. Future enhancements are in the works to address these needs as well!',
104115
link: {
105116
label: 'Read more about Deterministic Propagation',
106117
url: '/docs/features/server_authoritative#determinstic-action-propagation-method',

apps/movex-docs/pages/docs/overview/get_started.mdx

+9-9
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,21 @@ yarn start
2020
yarn add movex movex-react; yarn add --dev movex-service
2121
```
2222

23-
### 3. Create the Movex Config File
23+
### 2. Create the Movex Config File
2424

2525
```ts copy filename="src/movex.config.ts"
2626
export default {
2727
resources: {},
2828
};
2929
```
3030

31-
### 2. Start Movex in Dev Mode
31+
### 3. Start Movex in Dev Mode
3232

3333
```bash copy
3434
npx movex dev
3535
```
3636

37-
### 3. Wrap the App in the MovexProvider
37+
### 4. Wrap the App in the MovexProvider
3838

3939
```ts copy filename="src/App.tsx" {4-5, 9-15, 32}
4040
import React from 'react';
@@ -73,7 +73,7 @@ export default function App() {
7373
}
7474
```
7575

76-
### 4. Add a Movex Resource
76+
### 5. Add a Movex Resource
7777

7878
In this short tutorial we're going to build a Counter App that will sync in real-time with another client out of the box.
7979

@@ -139,7 +139,7 @@ export default {
139139
};
140140
```
141141

142-
### 5. Let's add the Counter Component
142+
### 6. Let's add the Counter Component
143143

144144
For this tutorial, we'll keep the UI very basic since it's not the main point.
145145

@@ -176,7 +176,7 @@ On line 11 we're binding to the counter resource by rid. This means that now we
176176

177177
In the following lines we're rendering a very simple UI, which displays the Counter State at _line 20_ and adding two Buttons which will be responsible for triggering the "Increment" and "Decrement" actions.
178178

179-
### 5. And hook it up with our App
179+
### 7. And hook it up with our App
180180

181181
```ts copy showLineNumbers filename="src/App.tsx" {5-7, 10-13, 22-29, 32-39}
182182
import React, { useMemo } from 'react';
@@ -249,7 +249,7 @@ import Image from 'next/image';
249249
height={500}
250250
/>
251251

252-
### 5. Let's add the Actions
252+
### 8. Let's add the Actions
253253

254254
At this point we can see the state of the Counter Resource but cannot do much with it.
255255

@@ -311,7 +311,7 @@ And you should be able to see this:
311311
height={500}
312312
/>
313313

314-
### 6. Now bring in multi-players
314+
### 9. Now bring in multi-players
315315

316316
Open the URL in another browser tab or 2, or even 9 and start clicking the buttons. The changes will be synced in realtime, without any server-side coding.
317317

@@ -327,6 +327,6 @@ Open the URL in another browser tab or 2, or even 9 and start clicking the butto
327327

328328
The world is your oyster now – go make multiplayer gameees! :D
329329

330-
### 7. Homework
330+
### 10. Homework
331331

332332
If you want an extra step, implement the "incrementBy" Action and functionality.

apps/movex-docs/pages/index.mdx

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import { features, faqs, community } from '../modules/home/homeVars';
99
<div className="container mx-auto max-w-[90rem] gap-2 pl-[max(env(safe-area-inset-left),1.5rem)] pr-[max(env(safe-area-inset-right),1.5rem)]">
1010
<div className="flex flex-col lg:flex-row pt-4 md:pt-10 pb-10 lg:pt-20 lg:pb-20 gap-24 text-center lg:text-left">
1111
<div className="flex flex-col justify-center flex-1">
12-
<HeroText className="text-5xl md:text-6xl font-bold mb-4 lg:mb-10 !leading-normals !md:leading-[4.5rem]" />
13-
<HeroSubText className="text-xl lg:text-2xl mb-10 lg:mb-20 !leading-normal text-slate-500" />
12+
<HeroText className="text-5xl md:text-5xl font-bold mb-4 lg:mb-3 !leading-tight" />
13+
<HeroSubText className="text-xl lg:text-2xl mb-10 !leading-normal text-slate-500" />
1414

1515
<div className="flex flex-col gap-5">
1616
<div className="flex justify-center lg:justify-start">

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"build": "nx build movex-demo",
2525
"test": "nx run-many --all --target=test --skip-nx-cache",
2626
"dev-movex-docs": "npx nx serve movex-docs",
27-
"lint-all-libs": "npx nx run-many --parallel --target=lint --projects=movex-core-util,movex,movex-server,movex-service,movex-react,movex-vue --quiet",
27+
"lint-all-libs": "npx nx run-many --parallel --target=lint --projects=movex-core-util,movex,movex-server,movex-service,movex-react,movex-react-local-master,movex-vue,movex-store,movex-master,movex-specs-util --quiet",
2828
"push-all-libs--locally": "cd dist/libs/movex && yalc push && cd -; cd dist/libs/movex-server && yalc push && cd -; cd dist/libs/movex-core-util && yalc push && cd -; cd dist/libs/movex-react && yalc push && cd -; cd dist/libs/movex-service && yalc push && cd -; cd dist/libs/movex-store && yalc push && cd -; cd dist/libs/movex-master && yalc push && cd -;",
2929
"push-lib-locally--movex": "cd dist/libs/movex && yalc push && cd -",
3030
"push-lib-locally--movex-react": "cd dist/libs/movex-react && yalc push && cd -",

0 commit comments

Comments
 (0)