Monopad Journal is a modular journal editor designed for activity-related posts. This project leverages Next.js and AWS Amplify (Gen 1) to provide a robust and scalable solution for managing and sharing your activities.
- Modular and customizable editor for activity-related posts.
- Integrates with AWS, Cloudinary, Mapbox and MUX for enhanced media and map capabilities.
- Built with modern technologies such as React, Slate.js, and Theme UI.
To get started with Monopad Journal, follow these steps:
-
Clone the Repository:
git clone git@github.com:saegey/post-creator.git cd post-creator -
Install Dependencies:
npm install
-
Configure Environment Variables:
Set up the necessary environment variables for MUX, Mapbox, Cloudinary, and AWS keys into a
.env.localfile.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your-cloudinary-cloud-name MUX_TOKEN_ID=your-mux-token-id MUX_TOKEN_SECRET=your-mux-token-secret
-
Configure Amplify
amplify pull -appId your-amplify-app-id -envName your-amplify-env-name
-
Run the Development Server:
npm run devOpen http://localhost:3000 in your browser to see the application.
Monopad Journal requires the following configurations:
- AWS: For backend services provided by Amplify.
- Cloudinary: For image and video storage.
- Mapbox: For map rendering and geolocation features.
- MUX: For video handling.
This project uses Vitest for unit testing and Cypress for end-to-end testing.
To run the tests:
# Run Vitest tests
npm run test
# Run Cypress tests
npm run cypress:opendocker build -t monopad/editor .
docker tag monopad/editor:latest public.ecr.aws/k9z6w6x3/monopad/editor:latest
docker push public.ecr.aws/k9z6w6x3/monopad/editor:latestContributions are welcome! Please follow the Contributing Guidelines commonly used in popular open-source projects.
This project is licensed under the MIT License. See the LICENSE file for more details.
Monopad Journal was built using the following open-source projects:
Adam Saegebarth You can reach me at adam.saegebarth@gmail.com.
Monopad Journal relies on the following key dependencies:
"dependencies": {
"@aws-sdk/client-cognito-identity-provider": "^3.645.0",
"@aws-sdk/client-iot": "^3.632.0",
"@cloudinary-util/url-loader": "^5.6.0",
"@emotion/react": "^11.13.0",
"@floating-ui/react": "^0.26.6",
"@mux/mux-player-react": "^2.2.0",
"@mux/mux-uploader-react": "^1.0.0-beta.13",
"@slate-serializers/react": "^2.2.1",
"@theme-ui/color": "^0.16.2",
"@vitejs/plugin-react": "^4.3.1",
"aws-amplify": "^5.3.21",
"gray-matter": "^4.0.3",
"image-size": "^1.1.1",
"mapbox-gl": "^2.15.0",
"moment": "^2.29.4",
"next": "^14.2.7",
"next-cloudinary": "^6.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-google-recaptcha": "^3.1.0",
"react-markdown": "^9.0.1",
"react-slideshow-image": "^4.3.0",
"recharts": "^2.12.7",
"remark": "^15.0.1",
"remark-html": "^16.0.1",
"slate": "^0.103.0",
"slate-history": "^0.100.0",
"slate-react": "^0.108.0"
},
"devDependencies": {
"@swc/core": "^1.7.11",
"@testing-library/jest-dom": "^6.4.8",
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.5.2",
"@types/formidable": "^3.4.0",
"@types/mapbox-gl": "^2.7.13",
"@types/mdast": "^4.0.3",
"@types/react": "^18.2.0",
"@types/react-google-recaptcha": "^2.1.8",
"@types/react-test-renderer": "^18.0.7",
"@vitest/coverage-v8": "^2.0.5",
"@vitest/ui": "^2.0.5",
"cypress": "^13.14.1",
"happy-dom": "^14.12.3",
"identity-obj-proxy": "^3.0.0",
"mocha": "^10.7.3",
"mochawesome": "^7.1.3",
"mochawesome-merge": "^4.3.0",
"mochawesome-report-generator": "^6.2.0",
"node-fetch": "^3.3.2",
"react-test-renderer": "^18.2.0",
"theme-ui": "^0.16.2",
"typescript": "5.1.6",
"vi-fetch": "^0.8.0",
"vitest": "^2.0.5"
}