Initial Commit
8
.dockerignore
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Ignore everything
|
||||||
|
**
|
||||||
|
|
||||||
|
# Allow only the files that are actually needed
|
||||||
|
!/package.json
|
||||||
|
!/yarn.lock
|
||||||
|
!/Gemfile
|
||||||
|
!/Gemfile.lock
|
11
.eslintrc.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extends": ["@uwu-codes/eslint-config/esm"],
|
||||||
|
"rules": {
|
||||||
|
"@typescript-eslint/no-unsafe-declaration-merging": "off",
|
||||||
|
"@typescript-eslint/explicit-function-return-type": "error",
|
||||||
|
"unicorn/prefer-string-replace-all": "off",
|
||||||
|
"unicorn/consistent-function-scoping": "off",
|
||||||
|
"default-case": "off",
|
||||||
|
"init-declarations": "off"
|
||||||
|
}
|
||||||
|
}
|
9
.gitattributes
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# See https://git-scm.com/docs/gitattributes for more about git attribute files.
|
||||||
|
|
||||||
|
# Mark the database schema as having been generated.
|
||||||
|
db/schema.rb linguist-generated
|
||||||
|
|
||||||
|
# Mark any vendored files as having been vendored.
|
||||||
|
vendor/* linguist-vendored
|
||||||
|
config/credentials/*.yml.enc diff=rails_credentials
|
||||||
|
config/credentials.yml.enc diff=rails_credentials
|
44
.gitignore
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
||||||
|
#
|
||||||
|
# If you find yourself ignoring temporary files generated by your text editor
|
||||||
|
# or operating system, you probably want to add a global ignore instead:
|
||||||
|
# git config --global core.excludesfile '~/.gitignore_global'
|
||||||
|
|
||||||
|
# Ignore bundler config.
|
||||||
|
/.bundle
|
||||||
|
/.yarn
|
||||||
|
|
||||||
|
# Ignore all environment files (except templates).
|
||||||
|
/.env*
|
||||||
|
!/.env*.erb
|
||||||
|
|
||||||
|
# Ignore all logfiles and tempfiles.
|
||||||
|
/log/*
|
||||||
|
/tmp/*
|
||||||
|
!/log/.keep
|
||||||
|
!/tmp/.keep
|
||||||
|
|
||||||
|
# Ignore pidfiles, but keep the directory.
|
||||||
|
/tmp/pids/*
|
||||||
|
!/tmp/pids/
|
||||||
|
!/tmp/pids/.keep
|
||||||
|
|
||||||
|
# Ignore storage (uploaded files in development and any SQLite databases).
|
||||||
|
/storage/*
|
||||||
|
!/storage/.keep
|
||||||
|
/tmp/storage/*
|
||||||
|
!/tmp/storage/
|
||||||
|
!/tmp/storage/.keep
|
||||||
|
|
||||||
|
/public/assets
|
||||||
|
|
||||||
|
# Ignore master key for decrypting credentials and more.
|
||||||
|
/config/master.key
|
||||||
|
|
||||||
|
/app/assets/builds/*
|
||||||
|
!/app/assets/builds/.keep
|
||||||
|
|
||||||
|
/node_modules
|
||||||
|
/scripts
|
||||||
|
/.idea
|
||||||
|
/.run
|
15
.image_optim.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
nice: 10
|
||||||
|
timeout: 120
|
||||||
|
|
||||||
|
advpng: false
|
||||||
|
gifsicle: true
|
||||||
|
jhead: false
|
||||||
|
jpegoptim: false
|
||||||
|
jpegrecompress: false
|
||||||
|
jpegtran: false
|
||||||
|
optipng: false
|
||||||
|
oxipng: false
|
||||||
|
pngcrush: false
|
||||||
|
pngout: false
|
||||||
|
pngquant: false
|
||||||
|
svgo: false
|
1
.node-version
Normal file
@ -0,0 +1 @@
|
|||||||
|
18.8.0
|
201
.rubocop.yml
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
inherit_mode:
|
||||||
|
merge:
|
||||||
|
- Exclude
|
||||||
|
- Include
|
||||||
|
|
||||||
|
require:
|
||||||
|
- rubocop-erb
|
||||||
|
- rubocop-rails
|
||||||
|
|
||||||
|
AllCops:
|
||||||
|
NewCops: enable
|
||||||
|
SuggestExtensions:
|
||||||
|
rubocop-factory_bot: false
|
||||||
|
|
||||||
|
Bundler/OrderedGems:
|
||||||
|
Enabled: true
|
||||||
|
|
||||||
|
Layout/EmptyLineAfterGuardClause:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Layout/FirstArrayElementIndentation:
|
||||||
|
EnforcedStyle: consistent
|
||||||
|
|
||||||
|
Layout/FirstHashElementIndentation:
|
||||||
|
EnforcedStyle: consistent
|
||||||
|
|
||||||
|
Layout/LineLength:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/SymbolConversion:
|
||||||
|
EnforcedStyle: consistent
|
||||||
|
|
||||||
|
Metrics/AbcSize:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/BlockLength:
|
||||||
|
AllowedMethods:
|
||||||
|
- class_methods
|
||||||
|
- concerning
|
||||||
|
- context
|
||||||
|
- create_table
|
||||||
|
- factory
|
||||||
|
- FactoryBot.define
|
||||||
|
- should
|
||||||
|
- should_eventually
|
||||||
|
Exclude:
|
||||||
|
- config/**/*.rb
|
||||||
|
|
||||||
|
Metrics/ClassLength:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/CyclomaticComplexity:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/MethodLength:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/ModuleLength:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/PerceivedComplexity:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Naming/PredicateName:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/BulkChangeTable:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/HasManyOrHasOneDependent:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/HttpStatus:
|
||||||
|
EnforcedStyle: numeric
|
||||||
|
|
||||||
|
Rails/I18nLocaleTexts:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/InverseOf:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/Output:
|
||||||
|
Exclude:
|
||||||
|
- db/seeds.rb
|
||||||
|
- db/fixes/*.rb
|
||||||
|
|
||||||
|
Rails/ReversibleMigration:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/SkipsModelValidations:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/TimeZone:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/WhereEquals:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/WhereExists:
|
||||||
|
EnforcedStyle: where
|
||||||
|
|
||||||
|
Rails/WhereNotWithMultipleConditions:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/ConditionalAssignment:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/Documentation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/EmptyMethod:
|
||||||
|
EnforcedStyle: expanded
|
||||||
|
|
||||||
|
Style/FloatDivision:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/GuardClause:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/HashSyntax:
|
||||||
|
EnforcedShorthandSyntax: never
|
||||||
|
|
||||||
|
Style/IfUnlessModifier:
|
||||||
|
Enabled: true
|
||||||
|
|
||||||
|
Style/Lambda:
|
||||||
|
EnforcedStyle: literal
|
||||||
|
|
||||||
|
Style/NumericPredicate:
|
||||||
|
EnforcedStyle: comparison
|
||||||
|
|
||||||
|
Style/PerlBackrefs:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/OutputSafety:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/QuotedSymbols:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/StringLiterals:
|
||||||
|
EnforcedStyle: double_quotes
|
||||||
|
|
||||||
|
Style/TrailingCommaInArguments:
|
||||||
|
EnforcedStyleForMultiline: comma
|
||||||
|
|
||||||
|
Style/TrailingCommaInArrayLiteral:
|
||||||
|
EnforcedStyleForMultiline: consistent_comma
|
||||||
|
|
||||||
|
Style/TrailingCommaInHashLiteral:
|
||||||
|
EnforcedStyleForMultiline: consistent_comma
|
||||||
|
|
||||||
|
Style/RescueModifier:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/StructNewOverride:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Layout/HashAlignment:
|
||||||
|
Enabled: true
|
||||||
|
EnforcedHashRocketStyle: table
|
||||||
|
EnforcedColonStyle: table
|
||||||
|
|
||||||
|
Style/MethodCallWithArgsParentheses:
|
||||||
|
Enabled: true
|
||||||
|
|
||||||
|
Style/MissingRespondToMissing:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/ModuleFunction:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/ApplicationMailer:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/ClassAndModuleChildren:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/MissingSuper:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/EmptyBlock:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/ActionControllerFlashBeforeRender:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/NegateInclude:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/DynamicFindBy:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/TransactionExitStatement:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/NestedTernaryOperator:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/ParameterLists:
|
||||||
|
Enabled: false
|
1
.ruby-version
Normal file
@ -0,0 +1 @@
|
|||||||
|
3.2.2
|
1
.yarnclean
Normal file
@ -0,0 +1 @@
|
|||||||
|
@types/node
|
1
.yarnrc.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
nodeLinker: node-modules
|
46
Dockerfile
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
FROM ruby:3.2.2-alpine3.18 as ruby-builder
|
||||||
|
|
||||||
|
RUN apk --no-cache add build-base cmake git glib-dev postgresql14-dev
|
||||||
|
|
||||||
|
COPY Gemfile Gemfile.lock ./
|
||||||
|
RUN gem i foreman && BUNDLE_IGNORE_CONFIG=true bundle install -j$(nproc) \
|
||||||
|
&& rm -rf /usr/local/bundle/cache/*.gem \
|
||||||
|
&& find /usr/local/bundle/gems/ -name "*.c" -delete \
|
||||||
|
&& find /usr/local/bundle/gems/ -name "*.o" -delete
|
||||||
|
|
||||||
|
FROM node:18-alpine3.18 as node-builder
|
||||||
|
RUN apk --no-cache add git
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package.json yarn.lock ./
|
||||||
|
RUN corepack enable && corepack prepare --activate && yarn install
|
||||||
|
RUN corepack install -g pnpm
|
||||||
|
|
||||||
|
FROM ruby:3.2.2-alpine3.18
|
||||||
|
|
||||||
|
RUN apk --no-cache add ffmpeg vips gifsicle \
|
||||||
|
postgresql14-client \
|
||||||
|
git jemalloc tzdata
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN git config --global --add safe.directory $(pwd)
|
||||||
|
|
||||||
|
ENV LD_PRELOAD=/usr/lib/libjemalloc.so.2
|
||||||
|
ENV RUBY_YJIT_ENABLE=1
|
||||||
|
|
||||||
|
# Setup node and yarn
|
||||||
|
COPY --from=node-builder /usr/lib /usr/lib
|
||||||
|
COPY --from=node-builder /usr/local/share /usr/local/share
|
||||||
|
COPY --from=node-builder /usr/local/lib /usr/local/lib
|
||||||
|
COPY --from=node-builder /usr/local/include /usr/local/include
|
||||||
|
COPY --from=node-builder /usr/local/bin /usr/local/bin
|
||||||
|
COPY --from=node-builder /root/.cache/node /root/.cache/node
|
||||||
|
|
||||||
|
# Copy gems and js packages
|
||||||
|
COPY --from=node-builder /app/node_modules node_modules
|
||||||
|
COPY --from=ruby-builder /usr/local/bundle /usr/local/bundle
|
||||||
|
|
||||||
|
# Stop bin/rails console from offering autocomplete
|
||||||
|
RUN echo "IRB.conf[:USE_AUTOCOMPLETE] = false" > ~/.irbrc
|
||||||
|
|
||||||
|
CMD ["foreman", "start", "-f", "Procfile.dev"]
|
95
Gemfile
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
gem "dotenv-rails", require: "dotenv/rails-now"
|
||||||
|
|
||||||
|
ruby "3.2.2"
|
||||||
|
|
||||||
|
# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
|
||||||
|
gem "rails", "~> 7.1.1"
|
||||||
|
|
||||||
|
# The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]
|
||||||
|
gem "sprockets-rails"
|
||||||
|
|
||||||
|
# Use postgresql as the database for Active Record
|
||||||
|
gem "pg", "~> 1.1"
|
||||||
|
|
||||||
|
# Use the Puma web server [https://github.com/puma/puma]
|
||||||
|
gem "puma", ">= 5.0"
|
||||||
|
|
||||||
|
# Bundle and transpile JavaScript [https://github.com/rails/jsbundling-rails]
|
||||||
|
gem "jsbundling-rails"
|
||||||
|
|
||||||
|
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
|
||||||
|
gem "turbo-rails"
|
||||||
|
|
||||||
|
# Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]
|
||||||
|
gem "stimulus-rails"
|
||||||
|
|
||||||
|
# Build JSON APIs with ease [https://github.com/rails/jbuilder]
|
||||||
|
gem "jbuilder"
|
||||||
|
|
||||||
|
# Use Redis adapter to run Action Cable in production
|
||||||
|
# gem "redis", ">= 4.0.1"
|
||||||
|
|
||||||
|
# Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis]
|
||||||
|
# gem "kredis"
|
||||||
|
|
||||||
|
# Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]
|
||||||
|
# gem "bcrypt", "~> 3.1.7"
|
||||||
|
|
||||||
|
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||||
|
gem "tzinfo-data", platforms: %i[windows jruby]
|
||||||
|
|
||||||
|
# Reduces boot times through caching; required in config/boot.rb
|
||||||
|
gem "bootsnap", require: false
|
||||||
|
|
||||||
|
# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
|
||||||
|
# gem "image_processing", "~> 1.2"
|
||||||
|
|
||||||
|
group :development, :test do
|
||||||
|
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
|
||||||
|
gem "debug", platforms: %i[mri windows]
|
||||||
|
end
|
||||||
|
|
||||||
|
group :development do
|
||||||
|
# Use console on exceptions pages [https://github.com/rails/web-console]
|
||||||
|
gem "web-console"
|
||||||
|
|
||||||
|
# Add speed badges [https://github.com/MiniProfiler/rack-mini-profiler]
|
||||||
|
# gem "rack-mini-profiler"
|
||||||
|
|
||||||
|
# Speed up commands on slow machines / big apps [https://github.com/rails/spring]
|
||||||
|
# gem "spring"
|
||||||
|
end
|
||||||
|
|
||||||
|
group :test do
|
||||||
|
# Use system testing [https://guides.rubyonrails.org/testing.html#system-testing]
|
||||||
|
gem "capybara"
|
||||||
|
gem "selenium-webdriver"
|
||||||
|
end
|
||||||
|
|
||||||
|
gem "github_webhook", "~> 1.4"
|
||||||
|
gem "httparty", "~> 0.21.0"
|
||||||
|
gem "redis", "~> 5.0"
|
||||||
|
gem "rubocop", "~> 1.57"
|
||||||
|
gem "rubocop-erb", "~> 0.3.0"
|
||||||
|
gem "rubocop-rails", "~> 2.22"
|
||||||
|
gem "whenever", "~> 1.0"
|
||||||
|
|
||||||
|
gem "filesize", "~> 0.2.0"
|
||||||
|
|
||||||
|
gem "ed25519", "~> 1.3"
|
||||||
|
|
||||||
|
gem "timeout", "~> 0.4.1"
|
||||||
|
|
||||||
|
gem "image_optim", "~> 0.31.3"
|
||||||
|
|
||||||
|
gem "request_store", "~> 1.5"
|
||||||
|
|
||||||
|
gem "ruby-vips", "~> 2.2"
|
||||||
|
|
||||||
|
gem "simple_form", "~> 5.3"
|
||||||
|
|
||||||
|
gem "responders", "~> 3.1"
|
352
Gemfile.lock
Normal file
@ -0,0 +1,352 @@
|
|||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
actioncable (7.1.1)
|
||||||
|
actionpack (= 7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
nio4r (~> 2.0)
|
||||||
|
websocket-driver (>= 0.6.1)
|
||||||
|
zeitwerk (~> 2.6)
|
||||||
|
actionmailbox (7.1.1)
|
||||||
|
actionpack (= 7.1.1)
|
||||||
|
activejob (= 7.1.1)
|
||||||
|
activerecord (= 7.1.1)
|
||||||
|
activestorage (= 7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
mail (>= 2.7.1)
|
||||||
|
net-imap
|
||||||
|
net-pop
|
||||||
|
net-smtp
|
||||||
|
actionmailer (7.1.1)
|
||||||
|
actionpack (= 7.1.1)
|
||||||
|
actionview (= 7.1.1)
|
||||||
|
activejob (= 7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
mail (~> 2.5, >= 2.5.4)
|
||||||
|
net-imap
|
||||||
|
net-pop
|
||||||
|
net-smtp
|
||||||
|
rails-dom-testing (~> 2.2)
|
||||||
|
actionpack (7.1.1)
|
||||||
|
actionview (= 7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
nokogiri (>= 1.8.5)
|
||||||
|
rack (>= 2.2.4)
|
||||||
|
rack-session (>= 1.0.1)
|
||||||
|
rack-test (>= 0.6.3)
|
||||||
|
rails-dom-testing (~> 2.2)
|
||||||
|
rails-html-sanitizer (~> 1.6)
|
||||||
|
actiontext (7.1.1)
|
||||||
|
actionpack (= 7.1.1)
|
||||||
|
activerecord (= 7.1.1)
|
||||||
|
activestorage (= 7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
globalid (>= 0.6.0)
|
||||||
|
nokogiri (>= 1.8.5)
|
||||||
|
actionview (7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
builder (~> 3.1)
|
||||||
|
erubi (~> 1.11)
|
||||||
|
rails-dom-testing (~> 2.2)
|
||||||
|
rails-html-sanitizer (~> 1.6)
|
||||||
|
activejob (7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
globalid (>= 0.3.6)
|
||||||
|
activemodel (7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
activerecord (7.1.1)
|
||||||
|
activemodel (= 7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
timeout (>= 0.4.0)
|
||||||
|
activestorage (7.1.1)
|
||||||
|
actionpack (= 7.1.1)
|
||||||
|
activejob (= 7.1.1)
|
||||||
|
activerecord (= 7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
marcel (~> 1.0)
|
||||||
|
activesupport (7.1.1)
|
||||||
|
base64
|
||||||
|
bigdecimal
|
||||||
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
|
connection_pool (>= 2.2.5)
|
||||||
|
drb
|
||||||
|
i18n (>= 1.6, < 2)
|
||||||
|
minitest (>= 5.1)
|
||||||
|
mutex_m
|
||||||
|
tzinfo (~> 2.0)
|
||||||
|
addressable (2.8.5)
|
||||||
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
|
ast (2.4.2)
|
||||||
|
base64 (0.2.0)
|
||||||
|
better_html (2.0.2)
|
||||||
|
actionview (>= 6.0)
|
||||||
|
activesupport (>= 6.0)
|
||||||
|
ast (~> 2.0)
|
||||||
|
erubi (~> 1.4)
|
||||||
|
parser (>= 2.4)
|
||||||
|
smart_properties
|
||||||
|
bigdecimal (3.1.4)
|
||||||
|
bindex (0.8.1)
|
||||||
|
bootsnap (1.17.0)
|
||||||
|
msgpack (~> 1.2)
|
||||||
|
builder (3.2.4)
|
||||||
|
capybara (3.39.2)
|
||||||
|
addressable
|
||||||
|
matrix
|
||||||
|
mini_mime (>= 0.1.3)
|
||||||
|
nokogiri (~> 1.8)
|
||||||
|
rack (>= 1.6.0)
|
||||||
|
rack-test (>= 0.6.3)
|
||||||
|
regexp_parser (>= 1.5, < 3.0)
|
||||||
|
xpath (~> 3.2)
|
||||||
|
chronic (0.10.2)
|
||||||
|
concurrent-ruby (1.2.2)
|
||||||
|
connection_pool (2.4.1)
|
||||||
|
crass (1.0.6)
|
||||||
|
date (3.3.4)
|
||||||
|
debug (1.8.0)
|
||||||
|
irb (>= 1.5.0)
|
||||||
|
reline (>= 0.3.1)
|
||||||
|
dotenv (2.8.1)
|
||||||
|
dotenv-rails (2.8.1)
|
||||||
|
dotenv (= 2.8.1)
|
||||||
|
railties (>= 3.2)
|
||||||
|
drb (2.2.0)
|
||||||
|
ruby2_keywords
|
||||||
|
ed25519 (1.3.0)
|
||||||
|
erubi (1.12.0)
|
||||||
|
exifr (1.4.0)
|
||||||
|
ffi (1.16.3)
|
||||||
|
filesize (0.2.0)
|
||||||
|
fspath (3.1.2)
|
||||||
|
github_webhook (1.4.2)
|
||||||
|
activesupport (>= 4)
|
||||||
|
rack (>= 1.3)
|
||||||
|
railties (>= 4)
|
||||||
|
globalid (1.2.1)
|
||||||
|
activesupport (>= 6.1)
|
||||||
|
httparty (0.21.0)
|
||||||
|
mini_mime (>= 1.0.0)
|
||||||
|
multi_xml (>= 0.5.2)
|
||||||
|
i18n (1.14.1)
|
||||||
|
concurrent-ruby (~> 1.0)
|
||||||
|
image_optim (0.31.3)
|
||||||
|
exifr (~> 1.2, >= 1.2.2)
|
||||||
|
fspath (~> 3.0)
|
||||||
|
image_size (>= 1.5, < 4)
|
||||||
|
in_threads (~> 1.3)
|
||||||
|
progress (~> 3.0, >= 3.0.1)
|
||||||
|
image_size (3.3.0)
|
||||||
|
in_threads (1.6.0)
|
||||||
|
io-console (0.6.0)
|
||||||
|
irb (1.8.3)
|
||||||
|
rdoc
|
||||||
|
reline (>= 0.3.8)
|
||||||
|
jbuilder (2.11.5)
|
||||||
|
actionview (>= 5.0.0)
|
||||||
|
activesupport (>= 5.0.0)
|
||||||
|
jsbundling-rails (1.2.1)
|
||||||
|
railties (>= 6.0.0)
|
||||||
|
json (2.6.3)
|
||||||
|
language_server-protocol (3.17.0.3)
|
||||||
|
loofah (2.21.4)
|
||||||
|
crass (~> 1.0.2)
|
||||||
|
nokogiri (>= 1.12.0)
|
||||||
|
mail (2.8.1)
|
||||||
|
mini_mime (>= 0.1.1)
|
||||||
|
net-imap
|
||||||
|
net-pop
|
||||||
|
net-smtp
|
||||||
|
marcel (1.0.2)
|
||||||
|
matrix (0.4.2)
|
||||||
|
mini_mime (1.1.5)
|
||||||
|
minitest (5.20.0)
|
||||||
|
msgpack (1.7.2)
|
||||||
|
multi_xml (0.6.0)
|
||||||
|
mutex_m (0.2.0)
|
||||||
|
net-imap (0.4.4)
|
||||||
|
date
|
||||||
|
net-protocol
|
||||||
|
net-pop (0.1.2)
|
||||||
|
net-protocol
|
||||||
|
net-protocol (0.2.2)
|
||||||
|
timeout
|
||||||
|
net-smtp (0.4.0)
|
||||||
|
net-protocol
|
||||||
|
nio4r (2.5.9)
|
||||||
|
nokogiri (1.15.4-x86_64-linux)
|
||||||
|
racc (~> 1.4)
|
||||||
|
parallel (1.23.0)
|
||||||
|
parser (3.2.2.4)
|
||||||
|
ast (~> 2.4.1)
|
||||||
|
racc
|
||||||
|
pg (1.5.4)
|
||||||
|
progress (3.6.0)
|
||||||
|
psych (5.1.1.1)
|
||||||
|
stringio
|
||||||
|
public_suffix (5.0.3)
|
||||||
|
puma (6.4.0)
|
||||||
|
nio4r (~> 2.0)
|
||||||
|
racc (1.7.3)
|
||||||
|
rack (3.0.8)
|
||||||
|
rack-session (2.0.0)
|
||||||
|
rack (>= 3.0.0)
|
||||||
|
rack-test (2.1.0)
|
||||||
|
rack (>= 1.3)
|
||||||
|
rackup (2.1.0)
|
||||||
|
rack (>= 3)
|
||||||
|
webrick (~> 1.8)
|
||||||
|
rails (7.1.1)
|
||||||
|
actioncable (= 7.1.1)
|
||||||
|
actionmailbox (= 7.1.1)
|
||||||
|
actionmailer (= 7.1.1)
|
||||||
|
actionpack (= 7.1.1)
|
||||||
|
actiontext (= 7.1.1)
|
||||||
|
actionview (= 7.1.1)
|
||||||
|
activejob (= 7.1.1)
|
||||||
|
activemodel (= 7.1.1)
|
||||||
|
activerecord (= 7.1.1)
|
||||||
|
activestorage (= 7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
bundler (>= 1.15.0)
|
||||||
|
railties (= 7.1.1)
|
||||||
|
rails-dom-testing (2.2.0)
|
||||||
|
activesupport (>= 5.0.0)
|
||||||
|
minitest
|
||||||
|
nokogiri (>= 1.6)
|
||||||
|
rails-html-sanitizer (1.6.0)
|
||||||
|
loofah (~> 2.21)
|
||||||
|
nokogiri (~> 1.14)
|
||||||
|
railties (7.1.1)
|
||||||
|
actionpack (= 7.1.1)
|
||||||
|
activesupport (= 7.1.1)
|
||||||
|
irb
|
||||||
|
rackup (>= 1.0.0)
|
||||||
|
rake (>= 12.2)
|
||||||
|
thor (~> 1.0, >= 1.2.2)
|
||||||
|
zeitwerk (~> 2.6)
|
||||||
|
rainbow (3.1.1)
|
||||||
|
rake (13.1.0)
|
||||||
|
rdoc (6.6.0)
|
||||||
|
psych (>= 4.0.0)
|
||||||
|
redis (5.0.8)
|
||||||
|
redis-client (>= 0.17.0)
|
||||||
|
redis-client (0.18.0)
|
||||||
|
connection_pool
|
||||||
|
regexp_parser (2.8.2)
|
||||||
|
reline (0.4.0)
|
||||||
|
io-console (~> 0.5)
|
||||||
|
request_store (1.5.1)
|
||||||
|
rack (>= 1.4)
|
||||||
|
responders (3.1.1)
|
||||||
|
actionpack (>= 5.2)
|
||||||
|
railties (>= 5.2)
|
||||||
|
rexml (3.2.6)
|
||||||
|
rubocop (1.57.2)
|
||||||
|
json (~> 2.3)
|
||||||
|
language_server-protocol (>= 3.17.0)
|
||||||
|
parallel (~> 1.10)
|
||||||
|
parser (>= 3.2.2.4)
|
||||||
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
|
regexp_parser (>= 1.8, < 3.0)
|
||||||
|
rexml (>= 3.2.5, < 4.0)
|
||||||
|
rubocop-ast (>= 1.28.1, < 2.0)
|
||||||
|
ruby-progressbar (~> 1.7)
|
||||||
|
unicode-display_width (>= 2.4.0, < 3.0)
|
||||||
|
rubocop-ast (1.30.0)
|
||||||
|
parser (>= 3.2.1.0)
|
||||||
|
rubocop-erb (0.3.0)
|
||||||
|
better_html
|
||||||
|
rubocop (~> 1.45)
|
||||||
|
rubocop-rails (2.22.1)
|
||||||
|
activesupport (>= 4.2.0)
|
||||||
|
rack (>= 1.1)
|
||||||
|
rubocop (>= 1.33.0, < 2.0)
|
||||||
|
ruby-progressbar (1.13.0)
|
||||||
|
ruby-vips (2.2.0)
|
||||||
|
ffi (~> 1.12)
|
||||||
|
ruby2_keywords (0.0.5)
|
||||||
|
rubyzip (2.3.2)
|
||||||
|
selenium-webdriver (4.15.0)
|
||||||
|
rexml (~> 3.2, >= 3.2.5)
|
||||||
|
rubyzip (>= 1.2.2, < 3.0)
|
||||||
|
websocket (~> 1.0)
|
||||||
|
simple_form (5.3.0)
|
||||||
|
actionpack (>= 5.2)
|
||||||
|
activemodel (>= 5.2)
|
||||||
|
smart_properties (1.17.0)
|
||||||
|
sprockets (4.2.1)
|
||||||
|
concurrent-ruby (~> 1.0)
|
||||||
|
rack (>= 2.2.4, < 4)
|
||||||
|
sprockets-rails (3.4.2)
|
||||||
|
actionpack (>= 5.2)
|
||||||
|
activesupport (>= 5.2)
|
||||||
|
sprockets (>= 3.0.0)
|
||||||
|
stimulus-rails (1.3.0)
|
||||||
|
railties (>= 6.0.0)
|
||||||
|
stringio (3.0.8)
|
||||||
|
thor (1.3.0)
|
||||||
|
timeout (0.4.1)
|
||||||
|
turbo-rails (1.5.0)
|
||||||
|
actionpack (>= 6.0.0)
|
||||||
|
activejob (>= 6.0.0)
|
||||||
|
railties (>= 6.0.0)
|
||||||
|
tzinfo (2.0.6)
|
||||||
|
concurrent-ruby (~> 1.0)
|
||||||
|
unicode-display_width (2.5.0)
|
||||||
|
web-console (4.2.1)
|
||||||
|
actionview (>= 6.0.0)
|
||||||
|
activemodel (>= 6.0.0)
|
||||||
|
bindex (>= 0.4.0)
|
||||||
|
railties (>= 6.0.0)
|
||||||
|
webrick (1.8.1)
|
||||||
|
websocket (1.2.10)
|
||||||
|
websocket-driver (0.7.6)
|
||||||
|
websocket-extensions (>= 0.1.0)
|
||||||
|
websocket-extensions (0.1.5)
|
||||||
|
whenever (1.0.0)
|
||||||
|
chronic (>= 0.6.3)
|
||||||
|
xpath (3.2.0)
|
||||||
|
nokogiri (~> 1.8)
|
||||||
|
zeitwerk (2.6.12)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
x86_64-linux
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
bootsnap
|
||||||
|
capybara
|
||||||
|
debug
|
||||||
|
dotenv-rails
|
||||||
|
ed25519 (~> 1.3)
|
||||||
|
filesize (~> 0.2.0)
|
||||||
|
github_webhook (~> 1.4)
|
||||||
|
httparty (~> 0.21.0)
|
||||||
|
image_optim (~> 0.31.3)
|
||||||
|
jbuilder
|
||||||
|
jsbundling-rails
|
||||||
|
pg (~> 1.1)
|
||||||
|
puma (>= 5.0)
|
||||||
|
rails (~> 7.1.1)
|
||||||
|
redis (~> 5.0)
|
||||||
|
request_store (~> 1.5)
|
||||||
|
responders (~> 3.1)
|
||||||
|
rubocop (~> 1.57)
|
||||||
|
rubocop-erb (~> 0.3.0)
|
||||||
|
rubocop-rails (~> 2.22)
|
||||||
|
ruby-vips (~> 2.2)
|
||||||
|
selenium-webdriver
|
||||||
|
simple_form (~> 5.3)
|
||||||
|
sprockets-rails
|
||||||
|
stimulus-rails
|
||||||
|
timeout (~> 0.4.1)
|
||||||
|
turbo-rails
|
||||||
|
tzinfo-data
|
||||||
|
web-console
|
||||||
|
whenever (~> 1.0)
|
||||||
|
|
||||||
|
RUBY VERSION
|
||||||
|
ruby 3.2.2p53
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
2.4.21
|
2
Procfile
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
server: bin/rails server -p 3000 -b 0.0.0.0
|
||||||
|
cron: bundler exec whenever --set environment="$RAILS_ENV" --update-crontab && crond -f
|
3
Procfile.dev
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
server: bin/rails server -p 3000 -b 0.0.0.0
|
||||||
|
assets: yarn build --watch
|
||||||
|
cron: bundler exec whenever --set environment="$RAILS_ENV" --update-crontab && crond -f
|
18
README.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# README
|
||||||
|
|
||||||
|
* https://butts-are.cool
|
||||||
|
* https://e621.ws
|
||||||
|
* https://furry.cool
|
||||||
|
* https://maidboye.cafe
|
||||||
|
* https://oceanic.ws
|
||||||
|
* https://yiff.media
|
||||||
|
* https://yiff.rest
|
||||||
|
* https://yiff.rocks
|
||||||
|
|
||||||
|
# Production
|
||||||
|
`docker compose -f docker-compose.prod.yml run --rm -e RAILS_ENV=production websites /app/bin/setup`
|
||||||
|
`docker compose -f docker-compose.prod.yml up -d`
|
||||||
|
|
||||||
|
# Development
|
||||||
|
`docker compose run --rm websites /app/bin/setup`
|
||||||
|
`docker compose up`
|
8
Rakefile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
||||||
|
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
||||||
|
|
||||||
|
require_relative "config/application"
|
||||||
|
|
||||||
|
Rails.application.load_tasks
|
0
app/assets/builds/.keep
Normal file
2
app/assets/config/manifest.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
//= link_tree ../images
|
||||||
|
//= link_tree ../builds
|
BIN
app/assets/images/butts-are.cool/android-icon-144x144.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
app/assets/images/butts-are.cool/android-icon-192x192.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
app/assets/images/butts-are.cool/android-icon-36x36.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
app/assets/images/butts-are.cool/android-icon-48x48.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
app/assets/images/butts-are.cool/android-icon-72x72.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
app/assets/images/butts-are.cool/android-icon-96x96.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-114x114.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-120x120.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-144x144.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-152x152.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-180x180.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-57x57.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-60x60.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-72x72.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-76x76.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon-precomposed.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
app/assets/images/butts-are.cool/apple-icon.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
app/assets/images/butts-are.cool/butts.mp4
Normal file
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 64 KiB |
BIN
app/assets/images/butts-are.cool/custom/balls/apple-icon.png
Normal file
After Width: | Height: | Size: 64 KiB |
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<browserconfig><msapplication><tile><square70x70logo src="https://balls.butts-are.cool/ms-icon-70x70.png"/><square150x150logo src="https://balls.butts-are.cool/ms-icon-150x150.png"/><square310x310logo src="https://balls.butts-are.cool/ms-icon-310x310.png"/><TileColor>#00ffff</TileColor></tile></msapplication></browserconfig>
|
BIN
app/assets/images/butts-are.cool/custom/balls/favicon-16x16.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
app/assets/images/butts-are.cool/custom/balls/favicon-32x32.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
app/assets/images/butts-are.cool/custom/balls/favicon-96x96.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
app/assets/images/butts-are.cool/custom/balls/favicon.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
app/assets/images/butts-are.cool/custom/balls/full.jpg
Normal file
After Width: | Height: | Size: 160 KiB |
BIN
app/assets/images/butts-are.cool/custom/balls/image-ogp.png
Normal file
After Width: | Height: | Size: 792 KiB |
BIN
app/assets/images/butts-are.cool/custom/balls/image.png
Normal file
After Width: | Height: | Size: 57 KiB |
92
app/assets/images/butts-are.cool/custom/balls/manifest.json
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
{
|
||||||
|
"name": "Butts Are Cool - Balls",
|
||||||
|
"short_name": "Butts Are Cool - Balls",
|
||||||
|
"theme_color": "#00ffff",
|
||||||
|
"background_color": "#00ffff",
|
||||||
|
"display": "browser",
|
||||||
|
"scope": "/",
|
||||||
|
"start_url": "/",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/favicon-16x16.png",
|
||||||
|
"sizes": "16x16",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/favicon-32x32.png",
|
||||||
|
"sizes": "32x32",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/android-icon-36x36.png",
|
||||||
|
"sizes": "36x36",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "0.75"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/android-icon-48x48.png",
|
||||||
|
"sizes": "48x48",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "1.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/apple-icon-57x57.png",
|
||||||
|
"sizes": "57x57",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/apple-icon-60x60.png",
|
||||||
|
"sizes": "60x60",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/android-icon-72x72.png",
|
||||||
|
"sizes": "72x72",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "1.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/apple-icon-76x76.png",
|
||||||
|
"sizes": "76x76",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/android-icon-96x96.png",
|
||||||
|
"sizes": "96x96",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "2.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/apple-icon-114x114.png",
|
||||||
|
"sizes": "114x114",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/apple-icon-120x120.png",
|
||||||
|
"sizes": "120x120",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/android-icon-144x144.png",
|
||||||
|
"sizes": "144x144",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "3.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/apple-icon-152x152.png",
|
||||||
|
"sizes": "152x152",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/apple-icon-180x180.png",
|
||||||
|
"sizes": "180x180",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://balls.butts-are.cool/android-icon-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "4.0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 129 KiB |
BIN
app/assets/images/butts-are.cool/custom/balls/ms-icon-70x70.png
Normal file
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 59 KiB |
BIN
app/assets/images/butts-are.cool/custom/cocks/apple-icon.png
Normal file
After Width: | Height: | Size: 59 KiB |
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<browserconfig><msapplication><tile><square70x70logo src="https://penises.butts-are.cool/ms-icon-70x70.png"/><square150x150logo src="https://penises.butts-are.cool/ms-icon-150x150.png"/><square310x310logo src="https://penises.butts-are.cool/ms-icon-310x310.png"/><TileColor>#00ffff</TileColor></tile></msapplication></browserconfig>
|
BIN
app/assets/images/butts-are.cool/custom/cocks/favicon-16x16.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
app/assets/images/butts-are.cool/custom/cocks/favicon-32x32.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
app/assets/images/butts-are.cool/custom/cocks/favicon-96x96.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
app/assets/images/butts-are.cool/custom/cocks/favicon.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
app/assets/images/butts-are.cool/custom/cocks/full.jpg
Normal file
After Width: | Height: | Size: 390 KiB |
BIN
app/assets/images/butts-are.cool/custom/cocks/image-ogp.png
Normal file
After Width: | Height: | Size: 826 KiB |
BIN
app/assets/images/butts-are.cool/custom/cocks/image.png
Normal file
After Width: | Height: | Size: 342 KiB |
92
app/assets/images/butts-are.cool/custom/cocks/manifest.json
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
{
|
||||||
|
"name": "Butts Are Cool - Penises",
|
||||||
|
"short_name": "Butts Are Cool - Penises",
|
||||||
|
"theme_color": "#00ffff",
|
||||||
|
"background_color": "#00ffff",
|
||||||
|
"display": "browser",
|
||||||
|
"scope": "/",
|
||||||
|
"start_url": "/",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/favicon-16x16.png",
|
||||||
|
"sizes": "16x16",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/favicon-32x32.png",
|
||||||
|
"sizes": "32x32",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/android-icon-36x36.png",
|
||||||
|
"sizes": "36x36",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "0.75"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/android-icon-48x48.png",
|
||||||
|
"sizes": "48x48",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "1.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/apple-icon-57x57.png",
|
||||||
|
"sizes": "57x57",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/apple-icon-60x60.png",
|
||||||
|
"sizes": "60x60",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/android-icon-72x72.png",
|
||||||
|
"sizes": "72x72",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "1.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/apple-icon-76x76.png",
|
||||||
|
"sizes": "76x76",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/android-icon-96x96.png",
|
||||||
|
"sizes": "96x96",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "2.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/apple-icon-114x114.png",
|
||||||
|
"sizes": "114x114",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/apple-icon-120x120.png",
|
||||||
|
"sizes": "120x120",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/android-icon-144x144.png",
|
||||||
|
"sizes": "144x144",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "3.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/apple-icon-152x152.png",
|
||||||
|
"sizes": "152x152",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/apple-icon-180x180.png",
|
||||||
|
"sizes": "180x180",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "https://penises.butts-are.cool/android-icon-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "4.0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 115 KiB |
BIN
app/assets/images/butts-are.cool/custom/cocks/ms-icon-70x70.png
Normal file
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 2.8 KiB |