Code Monkey home page Code Monkey logo

exif-photo-blog's Introduction

📷 EXIF Photo Blog

app-overview.mp4

Deploy with Vercel

Demo App

https://photos.sambecker.com

Features

  • Built-in auth
  • Photo upload with EXIF extraction
  • Organize photos by tag
  • Infinite scroll
  • Light/dark mode
  • Automatic OG image generation
  • CMD-K menu with photo search
  • Experimental support for AI-generated descriptions
  • Support for Fujifilm simulations

OG Image Preview

Installation

1. Deploy to Vercel

  1. Click Deploy
  2. Add required storage (Vercel Postgres + Vercel Blob) as part of template installation
  3. Configure environment variables from project settings:
  • NEXT_PUBLIC_SITE_TITLE (e.g., My Photos)
  • NEXT_PUBLIC_SITE_DOMAIN (e.g., photos.domain.com)
  • NEXT_PUBLIC_SITE_DESCRIPTION (optional—mainly used for OG meta)

2. Setup Auth

  1. Generate auth secret and add to environment variables:
  • AUTH_SECRET
  1. Add admin user to environment variables:
  • ADMIN_EMAIL
  • ADMIN_PASSWORD
  1. Trigger redeploy
  • Visit project on Vercel, navigate to "Deployments" tab, click ••• button next to most recent deployment, and select "Redeploy"

3. Upload your first photo 🎉

  1. Visit /admin
  2. Sign in with credentials supplied in Step 2
  3. Click "Upload Photos"
  4. Add optional title
  5. Click "Create"

Develop locally

  1. Clone code
  2. Run pnpm i to install dependencies
  3. Set environment variable AUTH_URL locally (not in production) to http://localhost:3000/api/url (this is a temporary limitation of next-auth v5.0 Beta)
  4. If necessary, install Vercel CLI and log in by running vercel login
  5. Run vercel link to connect the CLI to your project
  6. Run vercel dev to start dev server with Vercel-managed environment variables

Further customization

Experimental AI text generation

⚠️ READ BEFORE PROCEEDING

Usage of this feature will result in fees from OpenAI. When enabling AI text generation, follow all recommended mitigations in order to avoid unexpected charges and attacks. Make sure your OpenAI secret key environment variable is not prefixed with NEXT_PUBLIC.

  1. Setup OpenAI
    • If you don't already have one, create an OpenAI account
    • Generate an API key and store in environment variable OPENAI_SECRET_KEY
    • Setup usage limits to avoid unexpected charges (recommended)
  2. Add rate limiting (recommended)
    • As an additional precaution, create a Vercel KV store and link it to your project in order to enable rate limiting
  3. Configure auto-generated fields (optional)
    • Set which text fields auto-generate when uploading a photo by storing a comma-separated list, e.g., AI_TEXT_AUTO_GENERATED_FIELDS = title,semantic
    • Accepted values: title, caption, tags, description, all, or none (default is "all")

Web Analytics

  1. Open project on Vercel
  2. Click "Analytics" tab
  3. Follow "Enable Web Analytics" instructions (@vercel/analytics already included)

Speed Insights

  1. Open project on Vercel
  2. Click "Speed Insights" tab
  3. Follow "Enable Speed Insights" instructions (@vercel/speed-insights already included)

Optional configuration

Application behavior can be changed by configuring the following environment variables:

  • NEXT_PUBLIC_PRO_MODE = 1 enables higher quality image storage (results in increased storage usage)
  • NEXT_PUBLIC_BLUR_DISABLED = 1 prevents image blur data being stored and displayed (potentially useful for limiting Postgres usage)
  • NEXT_PUBLIC_GEO_PRIVACY = 1 disables collection/display of location-based data
  • NEXT_PUBLIC_IGNORE_PRIORITY_ORDER = 1 prevents priority_order field affecting photo order
  • NEXT_PUBLIC_PUBLIC_API = 1 enables public API available at /api
  • NEXT_PUBLIC_HIDE_REPO_LINK = 1 removes footer link to repo
  • NEXT_PUBLIC_HIDE_FILM_SIMULATIONS = 1 prevents Fujifilm simulations showing up in /grid sidebar
  • NEXT_PUBLIC_HIDE_EXIF_DATA = 1 hides EXIF data in photo details and OG images (potentially useful for portfolios, which don't focus on photography)
  • NEXT_PUBLIC_GRID_ASPECT_RATIO = 1.5 sets aspect ratio for grid tiles (defaults to 1—setting to 0 removes the constraint)
  • NEXT_PUBLIC_OG_TEXT_ALIGNMENT = BOTTOM keeps OG image text bottom aligned (default is top)

Alternate storage providers

Only one storage adapter—Vercel Blob, Cloudflare R2, or AWS S3—can be used at a time. Ideally, this is configured before photos are uploaded (see Issue #34 for migration considerations). If you have multiple adapters, you can set one as preferred by storing "aws-s3," "cloudflare-r2," or "vercel-blob" in NEXT_PUBLIC_STORAGE_PREFERENCE.

Cloudflare R2

  1. Setup bucket
    [{
        "AllowedHeaders": ["*"],
        "AllowedMethods": [
          "GET",
          "PUT"
        ],
        "AllowedOrigins": [
           "http://localhost:3000",
           "https://{VERCEL_PROJECT_NAME}*.vercel.app",
           "{PRODUCTION_DOMAIN}"
        ]
    }]
    • Enable public hosting by doing one of the following:
      • Select "Connect Custom Domain" and choose a Cloudflare domain
      • OR
      • Select "Allow Access" from R2.dev subdomain
    • Store public configuration:
      • NEXT_PUBLIC_CLOUDFLARE_R2_BUCKET: bucket name
      • NEXT_PUBLIC_CLOUDFLARE_R2_ACCOUNT_ID: account id (found on R2 overview page)
      • NEXT_PUBLIC_CLOUDFLARE_R2_PUBLIC_DOMAIN: either "your-custom-domain.com" or "pub-jf90908...s0d9f8s0s9df.r2.dev" (do not include "https://" in your domain)
  2. Setup private credentials
    • Create API token by selecting "Manage R2 API Tokens," and clicking "Create API Token"
    • Select "Object Read & Write," choose "Apply to specific buckets only," and select the bucket created in Step 1
    • Store credentials (⚠️ Ensure access keys are not prefixed with NEXT_PUBLIC):
      • CLOUDFLARE_R2_ACCESS_KEY
      • CLOUDFLARE_R2_SECRET_ACCESS_KEY

AWS S3

  1. Setup bucket
    • Create S3 bucket with "ACLs enabled," and "Block all public access" turned off
    • Setup CORS under bucket permissions:
      [{
       "AllowedHeaders": ["*"],
       "AllowedMethods": [
         "GET",
         "PUT"
       ],
       "AllowedOrigins": [
         "http://localhost:*",
         "https://{VERCEL_PROJECT_NAME}*.vercel.app",
         "{PRODUCTION_DOMAIN}"
       ],
       "ExposeHeaders": []
      }]
    • Store public configuration
      • NEXT_PUBLIC_AWS_S3_BUCKET: bucket name
      • NEXT_PUBLIC_AWS_S3_REGION: bucket region, e.g., "us-east-1"
  2. Setup private credentials
    • Create IAM policy using JSON editor:
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:PutObject",
              "s3:PutObjectACL",
              "s3:GetObject",
              "s3:ListBucket",
              "s3:DeleteObject"
            ],
            "Resource": [
              "arn:aws:s3:::{BUCKET_NAME}",
              "arn:aws:s3:::{BUCKET_NAME}/*"
            ]
          }
        ]
      }
    • Create IAM user by choosing "Attach policies directly," and selecting the policy created above. Create "Access key" under "Security credentials," choose "Application running outside AWS," and store credentials (⚠️ Ensure access keys are not prefixed with NEXT_PUBLIC):
      • AWS_S3_ACCESS_KEY
      • AWS_S3_SECRET_ACCESS_KEY

FAQ

Why are my thumbnails square?

Absent configuration, the default grid aspect ratio is 1. It can be set to any number (for instance 1.5 for 3:2 images) via NEXT_PUBLIC_GRID_ASPECT_RATIO or ignored entirely by setting to 0.

Why don't my photo changes show up immediately?

This template statically optimizes core views such as / and /grid to minimize visitor load times. Consequently, when photos are added, edited, or removed, it might take several minutes for those changes to propagate. If it seems like a change is not taking effect, try navigating to /admin/configuration and clicking "Clear Cache."

My images/content have fallen out of sync with my database and/or my production site no longer matches local development. What do I do?

Navigate to /admin/configuration and click "Clear Cache."

I'm seeing server-side runtime errors when loading a page after updating my fork. What do I do?

Navigate to /admin/configuration and click "Clear Cache." If this doesn't help, open an issue.

Why aren't my Fujifilm simulations importing alongside EXIF data?

Fujifilm simulation data is stored in vendor-specific Makernote binaries embedded in EXIF data. Under certain circumstances an intermediary may strip out this data. For instance, there is a known issue on iOS where editing an image, e.g., cropping it, causes Makernote data loss. If your simulation data appears to be missing, try importing the original file as it was stored by the camera. Additionally, if you can confirm the simulation mode on camera, you can then edit the photo record and manually select it.

Why do my images appear flipped/rotated incorrectly?

For a number of reasons, only EXIF orientations: 1, 3, 6, and 8 are supported. Orientations 2, 4, 5, and 7—which make use of mirroring—are not supported.

exif-photo-blog's People

Contributors

sambecker avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

exif-photo-blog's Issues

Handling non-EXIF data.....

Great work on the template and architecture going on in your code!
I've been wanting to show off some digital art on the photo blog. A lot of the digital art that I have does not have EXIF data or its just plain irrelevant.
I know this basically contradicts how you've structured the way your code handles image data but assuming I am NOT navigating the EXIF data (which btw is very impressive how you reverse engineered it), is there a way in the ENV to turn off showing ALL EXIF data? Or will I have to basically re-engineer the website and delete the instances of exif data?

auto add multiple photos

First of all thanks a lot of creating exif photo blog 👍
I understand the value of adding a title to each photo and have a curated collection but I was wondering if there is an option that I am missing to auto add photos uploaded. If you upload e.g. 50 photos, going through one by one is not optimal.

Of course these bulk uploads and adding to the gallery will be without title.

Is this option available? If not, how can it be added to save time in uploading multiple photos?
Thanks!

PNG image support

Hello,

I came across a previously closed issue that seemed to have resolved a user's concern regarding image formats. However, I'm encountering an issue that doesn't exactly match the one described there.

I'm curious about the support for PNG images in the codebase. Specifically, I'm interested in utilizing this photo blog to display generated art primarily in PNG format, as opposed to JPEG. Could you clarify whether the current implementation accommodates PNG images, or if additional code modifications are required?

image

Flickr Integration.

(feature request)
An env variable should be visible for a Flickr API Key. Where images are synced automatically using Flickr API.

Vercel Blob hitting 100MB cap on outgoing bandwidth almost immediately

Hey Sam! Thank you for making this website template. It is absolutely stunningly gorgeous, and I LOVE the simplicity of EXIF parsing. The whole thing is just so inspiring. I have one small question. While getting it set up, I've already hit the 100MB limit on Vercel Blob outgoing bandwidth twice! All of I've done is upload three or four photos, re-deploy a few times to get the environmental variables I want, and push a few tiny tweaks from a local copy. Is there anything I'm doing wrong, or is 100 MB just not enough bandwidth? I'd really hate to have to upgrade to Vercel Pro, $20 for a photo storage blob just feels wrong!

Thanks for any help you may be able to provide!

Eli

[Enhancement] Search/filter by date

It would be nice to be able to search/filter (using the CMD-K panel) by date.

Something simple like "show photos before/after/during x month and y year".

add an api

kind of a tall ask, but i want to be able to add photos / titles / tags from a script running on my computer to upload 5000+ photos at once

admin/photos route gets 404

After uploading a photo, clicking Create will redirect to the admin/photos route, displaying the 404 page shown below.

20240428-08-20-13-EwJwYie7

Refreshing this page will restore it to normal.

The browser console did not see any specific error. 😂

I run into an issue when I change to grid view from default view

My site is (https://shots.cigar.design), you can have a try to preview the error message as below:

Application error: a server-side exception has occurred (see the server logs for more information).
Digest: 534939749

Here are logs from the Vercel: [GET] /grid
shots – Logs – Vercel

TypeError: Cannot read properties of null (reading 'replace')
at (src/camera/index.ts:52:25)
at (src/camera/index.ts:32:16)
at (src/photo/PhotoGridSidebar.tsx:56:11)
at (node_modules/.pnpm/next@14.0.4_@babel[email protected][email protected][email protected]/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.min.js:42:208)
at (node_modules/.pnpm/next@14.0.4_@babel[email protected][email protected][email protected]/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.min.js:47:293)
at (node_modules/.pnpm/next@14.0.4_@babel[email protected][email protected][email protected]/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.min.js:38:228)
at (node_modules/.pnpm/next@14.0.4_@babel[email protected][email protected][email protected]/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.min.js:57:53)
at (node_modules/.pnpm/next@14.0.4_@babel[email protected][email protected][email protected]/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.min.js:58:128)

Is it possible to use the gallery without the s3:PutObjectACL policy?

Hello! I was able to connect aws s3 compatible storage to this project. But I encountered a problem, when I try to upload a photo, it is uploaded to the bucket and appears in the uploads section without preview, but when I click the "create" or "add" button, I get an error. I see the following errors in the Vercel logs.

InvalidArgument: Copy Source must mention the source bucket and key: sourcebucket/sourcekey
    at throwDefaultError (/var/task/node_modules/.pnpm/@[email protected]/node_modules/@smithy/smithy-client/dist-cjs/index.js:838:20)
    at /var/task/node_modules/.pnpm/@[email protected]/node_modules/@smithy/smithy-client/dist-cjs/index.js:847:5
    at de_CommandError (/var/task/node_modules/.pnpm/@[email protected]/node_modules/@aws-sdk/client-s3/dist-cjs/index.js:4756:14)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async /var/task/node_modules/.pnpm/@[email protected]/node_modules/@smithy/middleware-serde/dist-cjs/index.js:35:20
    at async /var/task/node_modules/.pnpm/@[email protected]/node_modules/@aws-sdk/middleware-signing/dist-cjs/index.js:225:18
    at async /var/task/node_modules/.pnpm/@[email protected]/node_modules/@smithy/middleware-retry/dist-cjs/index.js:320:38
    at async /var/task/node_modules/.pnpm/@[email protected]/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js:97:20
    at async /var/task/node_modules/.pnpm/@[email protected]/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js:120:14
    at async /var/task/node_modules/.pnpm/@[email protected]/node_modules/@aws-sdk/middleware-logger/dist-cjs/index.js:33:22 {
  '$fault': 'client',
  '$metadata': {
    httpStatusCode: 400,
    requestId: 'a0c3811f-2184-43d4-a400-dd5c8d9e9506',
    extendedRequestId: undefined,
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  Code: 'InvalidArgument',
  Resource: '/photo-Sc3H2LX3.jpg',
  RequestId: 'a0c3811f-2184-43d4-a400-dd5c8d9e9506',
  digest: '313664440'
}

and

[POST] /admin/uploads/https%3A%2F%2Fexif-photo-blog.s3.ru-1.storage.selcloud.ru%2Fupload-L4lCaYGEUDejYClj.jpg?nxtPuploadPath=https%3A%2F%2Fexif-photo-blog.s3.ru-1.storage.selcloud.ru%2Fupload-L4lCaYGEUDejYClj.jpg status=500

This may be due to the fact that the storage does not support the "s3:PutObjectACL" policy action. Are there any workarounds?

Support AWS S3 compatible services

Hello, I would like to use your project with AWS S3 compatible object storage ,timeweb.cloud Tell me how this can be implemented? I tried to edit this code but it didn't help

export const AWS_S3_BASE_URL = AWS_S3_BUCKET
  ? `https://${AWS_S3_BUCKET}.s3.timeweb.cloud`
  : undefined;

Снимок экрана от 2024-04-26 22-51-45

Image upload fails due to invalid time value

Hi @sambecker! Using the latest version of the project, I'm having the same issue encountered in #37 & #31.

Here's the image I was trying to upload

RangeError: Invalid time value
    at Date.toISOString (<anonymous>)
    at E (/var/task/.next/server/chunks/3029.js:179:5539)
    at h (/var/task/.next/server/chunks/3029.js:179:5606)
    at m (/var/task/.next/server/chunks/8271.js:1:4300)
    at i (/var/task/.next/server/chunks/8271.js:1:5758)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async x (/var/task/.next/server/app/admin/uploads/[uploadPath]/page.js:1:4242)

Thanks a lot!

?Next= URL Param Added to Homepage URL

Ever since moving to S3, my homepage is attempting to load the next set of images and progresses through a number of loops of which /"?Next={number}" is added to the end of the URL.

As the images are trying to load, the URL param number increments up to 115, then loads the next set of images.

In only have about 15 images loaded in S3 and my Vercel blob was deleted.

Any idea what could be causing this?

Thx,
Matt

image

I can't upload the image like this

          ![B_2476](https://github.com/sambecker/exif-photo-blog/assets/389157/f2fb77fd-01ef-49ca-b15c-7445cb7759d3)

Hi @sambecker , could you download this image, and try to upload it to the app, and then you will see the the errors message like this below:
Application error: a server-side exception has occurred (see the server logs for more information).
Digest: 1328241451

Here is my log from the Vercel Logs
RangeError: Invalid time value
at Date.toISOString ()
at d (/var/task/.next/server/chunks/6332.js:177:4753)
at h (/var/task/.next/server/chunks/6332.js:177:4820)
at g (/var/task/.next/server/chunks/9097.js:1:4254)
at s (/var/task/.next/server/chunks/9097.js:1:5751)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async d (/var/task/.next/server/app/admin/uploads/[uploadPath]/page.js:1:5923)

Originally posted by @cigar in #31 (comment)

Map View

Hello, thank you very much for providing such high-quality products. 😄

Because the photos include the geolocation information, would you consider providing a map view in the future so it is convenient to see the shooting locations of all photos? Thanks.

Photo sorting configuration

Hi! I really like this project. I switched my personal website over from Squarespace and I’m really happy with the result :)

One thing I haven’t been able to figure out even looking through the codebase is how the order of photos is controlled. I tried using the “priority order” setting in each photo, but it doesn’t seem to have any effect, whether I use a low or high value.

What am I missing?

Thank you and keep up the great work!

Support non-AWS S3 endpoint

This is for s3-compatible services like Tigris or Wasabi — need to be able to specify an alternative endpoint.

Currently, the endpoint is inferred/constructed from the provided bucket name and region, but Tigris for instance requires this to be set to fly.storage.tigris.dev and Wasabi something like s3.us-east-1.wasabisys.com.

Adding support for this would allow explicitly setting an env variable of AWS_S3_BASE_URL, then if it's not set in the environment, infer it: https://github.com/sambecker/exif-photo-blog/blob/main/src/services/storage/aws-s3.ts#L15-L17

I will take a crack at a PR for this...

I have requests - enable user to existing tags when we upload or edit a new photo

Hey Sam

You did a fantastic job for update the exif photo repo, actually, I longing for a solution to share my photo like you design and developed, and after I tried it for two weeks, from my perspective, I found that i really want to select the existing tags when we upload upload a new photo,currently I can only do it just type the tag in every single time!

Therefore, there are a lot of tags on front page,

So, I suggest maybe we could add this feature for upload or editing page.

Thanks again!

Admin - Access Denied - Application error: a server-side exception has occurred

First off, thank you for your efforts on this awesome portfolio/photog template. I've been having some access issues to log in since migrating the code to your latest release.

My next move is to remove AWS all together, but I'd like to use S3 for low cost storage. Below are the screenshots and logs im seeing (novice developer). Appreciate your help on this!

After deploying a fresh install and attempting login:
image

Logs for the issue apprear to be related to AWS which I've validated several times:
image

More detailed log data:

AccessDenied: Access Denied
at throwDefaultError (/var/task/node_modules/.pnpm/@smithy[email protected]/node_modules/@smithy/smithy-client/dist-cjs/default-error-handler.js:8:22)
at /var/task/node_modules/.pnpm/@smithy[email protected]/node_modules/@smithy/smithy-client/dist-cjs/default-error-handler.js:18:39
at de_ListObjectsCommandError (/var/task/node_modules/.pnpm/@AWS-SDK[email protected]/node_modules/@aws-sdk/client-s3/dist-cjs/protocols/Aws_restXml.js:4155:20)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async /var/task/node_modules/.pnpm/@smithy[email protected]/node_modules/@smithy/middleware-serde/dist-cjs/deserializerMiddleware.js:7:24
at async /var/task/node_modules/.pnpm/@AWS-SDK[email protected]/node_modules/@aws-sdk/middleware-signing/dist-cjs/awsAuthMiddleware.js:30:20
at async /var/task/node_modules/.pnpm/@smithy[email protected]/node_modules/@smithy/middleware-retry/dist-cjs/retryMiddleware.js:31:46
at async /var/task/node_modules/.pnpm/@AWS-SDK[email protected]/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/region-redirect-endpoint-middleware.js:14:24
at async /var/task/node_modules/.pnpm/@AWS-SDK[email protected]/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/region-redirect-middleware.js:9:20
at async /var/task/node_modules/.pnpm/@AWS-SDK[email protected]/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:7:26 {
'$fault': 'client',
'$metadata': {
httpStatusCode: 403,
requestId: '0NCXJQV4XC7AT9FV',
extendedRequestId: 'DlisE90kTyps8FjzBvnQu0FElFprwOLPovNk52qFx0vgQcNT1FvegNnQ4B64Y4pHy5Mp7acMiEU=',
cfId: undefined,
attempts: 1,
totalRetryDelay: 0
},
Code: 'AccessDenied',
RequestId: '0NCXJQV4XC7AT9FV',
HostId: 'DlisE90kTyps8FjzBvnQu0FElFprwOLPovNk52qFx0vgQcNT1FvegNnQ4B64Y4pHy5Mp7acMiEU='
}

SEO Enhancement

I think you could do something like keeping a unique meta title, and meta description for each photo.
For example: meta title = photo title & meta description would be like photo title | site name.
It's for better SEO practices. Something you should consider. Now It all returns duplicate titles & descriptions

I got the error message while i try to clean cache

Here is the error message while I navigate to this URL - /admin/configuration:

Application error: a server-side exception has occurred (see the server logs for more information).
Digest: 4223213064

And you can check more via this screen shot as below
CleanShot 2024-01-18 at 16 16 31@2x

Thanks

Feature request

Do you have any thoughts on replacing Vercel blob? Because Vercel free plan has a 100 MB data-transfer (monthly) limit for Blob.
There can be an alternative as well.

How to bulk upload images?

How do I bulk upload images? Is it possible through the admin panel? If not, is it possible by updating images in the vercel blob storage

Option to use any other Postgres

Hi, love this app!

I am deploying it on not Vercel, so I'd like to be able to use Supabase instead of Vercel Postgres. My understanding is this is supported in the SDK: https://vercel.com/docs/storage/vercel-postgres/sdk#createclient

Kicking this off in case others have a workaround to offer, but ultimately it would be nice to have the option to set a DATABASE_URL for any other PG and it Just Works™️

When I try to set POSTGRES_URL and POSTGRES_URL_NON_POOLING to my Supabase instance, I get:

VercelPostgresError - 'invalid_connection_string': This connection string is meant to be used with a direct connection. Make sure to use a pooled connection string or try `createClient()` instead.

Also, see https://github.com/orgs/supabase/discussions/14165 and vercel/storage#123

Integration Request

I think It would be great if you also add Cloudflare R2. Aws, Vercel Blog & Cloudflare R2. ❤️

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.