windmill

πŸŒ€ Video-sharing social networking app for short-form looping videos.

26
8
Swift

windmill

windmill is a simplified video-sharing social network built using Swift 5 and Go, where users can record, edit and post looping short-form videos.

Features
πŸ“Ή Record β€œTikTok” style looping videos
✏️ Add custom text and captions to your videos
πŸ‘€ Create an account and customize your profile
πŸ’š Follow friends and like their videos
πŸ“° Browse newsfeed of videos from users you follow
πŸ‘‹ View activity feed to see who is interacting with your profile
🐦 Swift 5
➑️ Go

Quick Start

Data Stores

- MongoDB -

First you will need to create a MongoDB instance, this can be either local or via MongoDB Atlas. Note your database URI.

- AWS S3 -

Once this is done, you will need to create an AWS S3 bucket and set the store to public. Follow this link for instructions on how to make this public (https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-bucket.html).

Swift

# Update and install deps

pod update
pod install

Obtain Google Client ID and URL Scheme for GoogleSignIn

Navigate here to get both of those (https://developers.google.com/identity/sign-in/ios/start-integrating) and follow all instructions

# Add credentials and other config settings to Config.plist file

ROOT_URL = http://localhost:8080
BUCKET_URL = https://my-project.s3.us-east-2.amazonaws.com
GOOGLE_CLIENT_ID = ENTER ID HERE
APP_BUNDLE_ID = io.liamreardon.windmill.dev
APP_NAME = windmill

Go

# Build go.mod

go build
# Install dependencies

go install
# Create .env file in windmill-backend directory and add MongoDB URI + AWS S3 vars

touch .env

# Include these lines but swap in your own urls and vars

DB_URI=mongodb://localhost:27017/myproject (this could be the uri for a local instance or MongoDB Atlas)

AWS_S3_BASE=https://myproject.s3.us-east-2.amazonaws.com/users/

AWS_S3_REGION=us-east-2

AWS_S3_BUCKET=my-project

# Add MongoDB URL to config.go

func GetConfig() *Config {
	uri, exists := os.LookupEnv("DB_URI")
	if exists {
		return &Config{
			DbURI: uri,
			Port:  ":8080",
		}
	}
	return &Config{}
}

# Run

go run main.go

Project

  • Have an idea for a feature? Open an issue.
  • Found a bug? Open an issue.
  • If you want to contribute to the project, submit a pull request.

Libraries Used

Swift

  • NextLevel - Rad Media Capture in Swift
  • Pageboy - A simple, highly informative page view controller
  • RPCircularProgress - Circular progress UIView subclass with UIProgressView properties
  • SwiftKeychainWrapper - A simple wrapper for the iOS Keychain to allow you to use it in a similar fashion to User Defaults
  • lottie-ios - An iOS library to natively render After Effects vector animations
  • GoogleSignIn - Add Google Sign-In to Your iOS App
  • Pastel - Gradient animation effects
  • SDWebImage - Asynchronous image downloader with cache support as a UIImageView category

Go

  • Google/UUID - Go package for UUIDs based on RFC 4122 and DCE 1.1: Authentication and Security Services
  • mongo-go-driver - The Go driver for MongoDB
  • bcrypt - Go package for the bcrypt hashing algorithm
  • aws-sdk-go - AWS SDK for the Go programming language
  • govalidator - Request data validation
  • gorilla/mux - A powerful HTTP router and URL matcher for building Go web servers

License

windmill is available under the MIT license, see the LICENSE file for more information.